[ VB.NET ] From による List, Dictionary クラスの初期化 ( VB2010 )

Pocket

List クラスや Dictionary クラスをはじめとするコレクションの初期化する方法について掲載しています。コレクションの初期化方法も VB.NET のバージョンアップとともに、より簡潔に記述できるように進化しています。

スポンサーリンク

VB2005 でコレクションの初期化を行う

VB2005 までは下記のように List や Dictionary クラスの初期化を行っていました。

    '----------------------------------------------
    ' Listクラス
    '----------------------------------------------

    ' インスタンスを生成し、アイテムを追加する方法
    Dim list1 As New List(Of String)
    list1.Add("Item1")
    list1.Add("Item2")

    ' コンストラクタに引数を与え、アイテムを追加する方法
    Dim items() As String = {"Item1", "Item2"}
    Dim list2 As New List(Of String)(items)

    '----------------------------------------------
    ' Dictionaryクラス
    '----------------------------------------------

    ' インスタンスを生成し、アイテムを追加する方法
    Dim dect1 As New Dictionary(Of Integer, String)
    dect1.Add(0, "Item1")
    dect1.Add(1, "Item2")

    ' コンストラクタに引数を与え、アイテムを追加する方法
    '(dect1がコピーされる)
    Dim dect2 As New Dictionary(Of Integer, String)(dect1)

    'dect2の内容は書き換えられない
    dect1.Item(0) = "文字列を書き換える"
VB2010 でコレクションの初期化を行う

VB2008においては、コレクションの初期化方法について特に変更はなかったような気がしますが、VB2010 では From キーワードによってインスタンス生成と初期化を簡潔に記述できるようになりました。

    ' List クラスの初期化
    Dim list As New List(Of String) From {
                                          "Item1",
                                          "Item2"
                                    }
    ' Dictionary クラスの初期化
    Dim dect As New Dictionary(Of Integer, String) From {
                                                        {0, "Item1"},
                                                        {1, "Item2"}
                                                   }

また、VB2010 から暗黙の行継続がサポートされるようになりました。これまで行の継続を行うには、行の末尾に ” _” ( アンダーバー ) を記述する必要がありましたが、その必要がなくなりました。
ただし、どこでも改行できるわけではありません。例えば、” Dictionary(Of Integer, String) From “の場合は、 From キーワードの前では暗黙の行継続はサポートされていません。

自前で定義したクラスを From キーワードで初期値を設定する

独自に定義したクラスに対して、From キーワードで初期値を与えるサンプルコードです。本サンプルはあまり有用ではないと思いますが、イメージは理解できると思います。最低限必要な記述は以下の2点です。

  1. IEnumerableインターフェースの実装
  2. Addメソッドを追加

’ユーザー定義クラス
Public Class UseFrom
    Implements IEnumerable

    ' From で与えられた初期値の個数回呼び出される
    Public Sub Add(ByVal i As Integer)
        Console.WriteLine(i.ToString())
    End Sub

    ' IEnumerableインターフェースの実装
    Public Function GetEnumerator() As System.Collections.IEnumerator _
                                    Implements System.Collections.IEnumerable.GetEnumerator
        Return CType(Me, IEnumerator)
    End Function

End Class

’ユーザー定義クラスに From で初期値を与える
Dim uf As New UseFrom From {0, 1, 2}

本サンプルを実行すると Add メソッドが 3 回、それぞれの初期値をパラメータとしてコールされます。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *