1

クラスのコレクション初期化子の値でリストを初期化して、別の関数から使用できるようにしたい:

public Form1()
{
    InitializeComponent();
}

List<string> list = new List<string>() {"one", "two", "three"}; 

括弧付きとなしのリストの違いは何ですか。この場合、どちらが適切ですか:

List<string> list = new List<string> {"one", "two", "three"}; 
4

2 に答える 2

1

通話中

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");
于 2017-06-02T06:13:38.103 に答える