这三种在C#中创建新的List 的方法有何不同?
这三种在C#中创建新的List
有何不同?
A = new List(); B = new List { }; C = new List() { };
那些是等价的,所有三个都创建一个空的List
。
- 是一个简单的无参数构造函数
- 使用集合初始化语法,如果类提供无参数构造函数,则允许省略构造函数的大括号
- 与2.相同,只是提供可选的构造函数括号。
集合初始化语法允许您在构造对象时提供数据,
List list = new List { "one", "two", "three" };
扩大到
List list = new List (); list.Add("one"); list.Add("two"); list.Add("three");
由编译器。
没有区别,因为您在声明时没有初始化列表中的任何内容。
如果您在声明时添加一些字符串,则需要使用第二个或第三个选项:
var B = new List { "some", "strings" }; var C = new List () { "some", "strings" };
如果要将值传递给List
构造函数,则只需要第三个选项:
var C = new List(5) { "some", "strings" };
要么
var C = new List(5); // empty list but capacity initialized with 5.
List
类还有更多构造函数可用(例如,将现有集合或IEnumerable传递给List构造函数)。 有关详细信息,请参阅MSDN
这些都是相同的。 最终结果没有区别,只是在语法中。
在您的示例中,所有三个语句都是相同的:它们创建一个空字符串列表。 语句B和C可以将一些初始数据分配给列表,例如
ingredients = new List { "Milk", "Sugar", "Flour" };
然后可以省略语句C中的()
。
{}
用于collection \ object initilizer。
如果它仍然是空白,则不会做任何事情。
因此所有这些线都产生相同的东西。
在您给我们的示例中,结果将是相同的。
在性能方面,使用任何选项初始化空列表都不会有任何问题,因为生成的IL将包含ctor(),正如您可以使用IL DASM看到的那样。
如果要使用某些信息初始化列表,可以使用选项2或3。
List b = new List { "abc", "abc" }; List c = new List () { "abc", "abc"};
在性能方面也是一样的,IL生成的将完全相同,包含ctor()和两个Add for both。
但你应该用最好的一个来阅读。 为了避免在为同事阅读代码时遇到任何问题,我会选择
List a = new List ();
但这是个人意见的问题。