通話中
List<string> list = new List<string> {"one", "two", "three"};
は省略形であり、デフォルトのコンストラクターを暗黙的に呼び出します。
List<string> list = new List<string>() {"one", "two", "three"};
生成された IL コードも参照してください。同じです。
List<string> list = new List<string>() {"one"};
List<string> list2 = new List<string> {"one"};
になります:
IL_0001: newobj instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
IL_0006: stloc.2
IL_0007: ldloc.2
IL_0008: ldstr "one"
IL_000d: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
IL_0012: nop
IL_0013: ldloc.2
IL_0014: stloc.0
IL_0015: newobj instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
IL_001a: stloc.3
IL_001b: ldloc.3
IL_001c: ldstr "one"
IL_0021: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
IL_0026: nop
IL_0027: ldloc.3
IL_0028: stloc.1
この{}
表記法は、最初にデフォルトのコンストラクターを呼び出し、次にメソッド{}
を使用して内部のすべての要素を追加する単なる構文糖衣であることがわかりますList<T>.Add()
。したがって、コードは次と同等です。
List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");