4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Visual BasicAdvent Calendar 2023

Day 15

【VB.NET】.NET 8でLINQに追加されたメソッドを使ってみる

Posted at

はじめに

これは、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に追加されたメソッドであるOrderOrderDescendingは使えました。

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で使用できる新機能がありそうなので、全部ではないですが確認して行こうと思います。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?