Voici une nouveauté sympa du compilateur de Visual Basic 10 (VB10), les "Collections Initializers" !

Supposons que nous souhaitions initialiser un List(Of Integer) avec des valeurs, voici le code classique que nous écrierions aujourd'hui :

Dim monTableau As New List(Of Integer)
monTableau.Add(2)
monTableau.Add(3)
monTableau.Add(4)
monTableau.Add(5)
 

Et bien, avec Visual Basic 10, voilà ce qu'il suffira d'écrire pour obtenir la même chose :

Dim monTableau As New List(Of Integer) From {2, 3, 4, 5}

Notez l'utilisation du mot-clé From. Et ne vous y trompez pas, bien que cette syntaxe soit simple et très lisible, le compilateur va bien générer le premier code que vous auriez écrit dans l'assembly finale, à savoir :

.method private instance void Button1_Click(object sender, class [mscorlib]System.EventArgs e) cil managed
{
    .maxstack 2
    .locals init (
        [0] class [mscorlib]System.Collections.Generic.List`1<int32> monTableau,
        [1] class [mscorlib]System.Collections.Generic.List`1<int32> VB$t_ref$S0)
    L_0000: nop
    L_0001: newobj instance void [mscorlib]System.Collections.Generic.List`1<int32>::.ctor()
    L_0006: stloc.1
    L_0007: ldloc.1
    L_0008: ldc.i4.2
    L_0009: callvirt instance void [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    L_000e: nop
    L_000f: ldloc.1
    L_0010: ldc.i4.3
    L_0011: callvirt instance void [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    L_0016: nop
    L_0017: ldloc.1
    L_0018: ldc.i4.4
    L_0019: callvirt instance void [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    L_001e: nop
    L_001f: ldloc.1
    L_0020: ldc.i4.5
    L_0021: callvirt instance void [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    L_0026: nop
    L_0027: ldloc.1
    L_0028: stloc.0
    L_0029: ldarg.0
    L_002a: callvirt instance class [System.Windows.Forms]System.Windows.Forms.ListBox Demos_VB10.Form1::get_ListBox1()
    L_002f: ldloc.0
    L_0030: callvirt instance void [System.Windows.Forms]System.Windows.Forms.ListControl::set_DataSource(object)
    L_0035: nop
    L_0036: nop
    L_0037: ret
}

On voit parfaitement ici les 4 appels à la méthode Add. On peut également utiliser ceci avec des choses plus complexes :

Dim monDictonnaire As New Dictionary(Of Integer, String) From {
                                                                {1, "Valeur1"},
                                                                {2, "Valeur2"},
                                                                {3, "Valeur3"},
                                                                {4, "Valeur4"}
                                                              }

Alors, c'est-y pas cool ça ? :-)