はじめに
これは、Visual Basic Advent Calendar 2023の15日目の記事となります。
11月14日に「.NET 8.0」 がリリースされました。
VB.NETは新機能の対応はしない方針ではあるが、記法に関係ない部分は対応します。
.NET 8.0でLINQに追加されたメソッド
.NET 8でLINQに追加されたメソッドであるToDictionary
メソッドに追加されたオーバーロード
が使用できるか確認してみました。
Public Structure Skill
Public Id As Integer
Public Name As String
Public Sub New(Id As Integer, Name As String)
Me.Id = Id
Me.Name = Name
End Sub
End Structure
Sub Main(args As String())
Dim skills As New List(Of Skill) From {
New Skill(Id:=0, Name:="ファイアー"),
New Skill(Id:=1, Name:="エルファイアー"),
New Skill(Id:=2, Name:="サンダー"),
New Skill(Id:=3, Name:="サンダーストーム"),
New Skill(Id:=4, Name:="エイルカリバー")
}
Dim skillNameDictionary = skills.ToDictionary(Function(it) it.Id, Function(it) it.Name)
Console.WriteLine(skillNameDictionary(0)) ' ファイアー
Console.WriteLine(skillNameDictionary(1)) ' エルファイアー
' "ファイアー"を含む内容のみ
Dim onlyFireSkillNameDictonary =
skillNameDictionary.Where(Function(it) it.Value.Contains("ファイアー")).ToDictionary()
For Each dic In onlyFireSkillNameDictonary
Console.WriteLine(dic)
Next
End Sub
結果
ファイアー
エルファイアー
[0, ファイアー]
[1, エルファイアー]
補足
C#の記事では、Record
型を使用していましたが、VB.NETでは標準では対応していないので変更しています。そこは今回は関係ない部分なので・・・。
ちなみにソースジェネレータ機能を使用してRecord
型を実現させています。
.NET 7.0版のLINQに追加されたメソッド
Visual Basic 2022年の振り返りで確認済み、再掲します。
.NET 7でLINQに追加されたメソッドであるOrder
とOrderDescending
は使えました。
Dim arrayNumber = {4, 5, 1, 3, 2}
' ↓は1, 2, 3, 4, 5というIOrderedEnumerable<int>
Dim sortedNumber = arrayNumber.Order()
' ↓は5, 4, 3, 2, 1というIOrderedEnumerable<int>
Dim sortedDescNumber = arrayNumber.OrderDescending()
Dim arrayMessage = {"b", "a", "aa", "ab", "ba", "bb", "aaa"}
' ↓はa, aa, aaa, ab, b, ba, bbというIOrderedEnumerable<string>
Dim sortedMessage = arrayMessage.Order()
' ↓はbb, ba, b, ab, aaa, aa, aというIOrderedEnumerable<string>
Dim sortedDescMessage = arrayMessage.OrderDescending()
最後に
.NET 8では、LINQ以外にもVB.NETで使用できる新機能がありそうなので、全部ではないですが確認して行こうと思います。