我如何在声明它的同一行中初始化一个C#列表。(IEnumerable字符串收集示例)


107

我正在写我的测试代码,但我不想写:

List<string> nameslist = new List<string>();
nameslist.Add("one");
nameslist.Add("two");
nameslist.Add("three");

我很想写

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

但是{“一个”,“两个”,“三个”}不是“ IEnumerable字符串集合”。如何使用IEnumerable字符串集合在一行中初始化它?

Answers:


168
var list = new List<string> { "One", "Two", "Three" };

本质上语法是:

new List<Type> { Instance1, Instance2, Instance3 };

编译器将其翻译为

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");

我喜欢这种无括号的方法,那是从什么C#版本开始的?
SilverbackNet 2010年

9
至少在一般情况下,这还没有完全翻译成这样。变量的赋值所有Add调用完成发生-好像它使用了一个临时变量,并list = tmp;在最后。如果您要重新分配变量的值,这可能很重要。
乔恩·斯基特

我相信,.NET 3引入了自动属性和对象初始化器,它是相同的Framework版本,只是一个更新的编译器以支持LINQ。
马修·阿伯特

@Jon,干杯,我从不知道那部分。:D
马修·阿伯特

@Jon Skeet:“ ...如果您要重新分配变量的值,这可能很重要。” 您能否对此发表更多解释?
托尼

17

将代码更改为

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

要么

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

使用第二行的目的是什么?在第二种语法中,“ new [] {...}”又是什么意思?为什么将new关键字与括号[]一起使用?
托尼




3

从您使用的C#版本开始,从3.0版开始就可以使用...

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

1

我认为这将适用于int,long和string值。

List<int> list = new List<int>(new int[]{ 2, 3, 7 });


var animals = new List<string>() { "bird", "dog" };

0

这是一种方式。

List<int> list = new List<int>{ 1, 2, 3, 4, 5 };

这是另一种方式。

List<int> list2 = new List<int>();

list2.Add(1);

list2.Add(2);

字符串也一样。

例如:

List<string> list3 = new List<string> { "Hello", "World" };
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.