Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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 ? :-)