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 ? :-)