初始化 class 中的列表以获得函数的可用性

Initialization of list in class for availability from functions

我想用 class 中的集合初始值设定项来初始化列表,以使其可供单独的函数使用:

public Form1()
{
    InitializeComponent();
}

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

带括号和不带括号的列表有什么区别,哪种适合这种情况:

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

进入()括号(构造函数)你可以传递一些特定的参数,比如列表的初始大小等。 使用 { } 括号时,您只需使用一些起始值初始化列表。

在您的情况下,使用哪个都没有区别,两者的效果与使用默认构造函数调用的效果相似。

通话中

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

只是一个 shorthand 并隐式调用默认构造函数:

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");