内联列表初始化

这样做时我得到一个奇怪的错误:(。net 2.0)

public overrides List getSpaceballs { get { return new List() { "abc","def","egh" }; } } 

VS要求; 之后() 。 为什么?

我当然可以这样做:

 public overrides string[] getSpaceballs { get { return new string[] { "abc","def","egh" }; } } 

第一个选项不合法:)

您只能在arrays上执行该类型的初始化程序。

– 编辑:见Andrew Hare的post(以及下面的其他人); 它仅适用于v3及更高版本。

– 再次编辑:

为了清楚起见,如果你的编译器是3或更高,你可以定位2.0,以使其工作(因为它编译为安德鲁显示的代码,下面)。 但是如果你的编译器是2,那你就不能。

C#的集合初始化语法仅在版本3及更高版本中受支持(因为您提到.NET 2.0我将假设您也在使用C#2)。 它可能有点混乱,因为C#总是支持类似的数组初始化语法,但它实际上并不是一回事。

集合初始化器是一种编译器技巧,允许您在一个语句中创建和初始化集合,如下所示:

 var list = new List { "foo", "bar" }; 

但是,此语句由编译器翻译为:

 List <>g__initLocal0 = new List(); <>g__initLocal0.Add("foo"); <>g__initLocal0.Add("bar"); List list = <>g__initLocal0; 

正如您所看到的,此function是一些语法糖,可将模式简化为单个表达式。

正如其他用户所指出的那样,2.0不支持。 但是,您可以通过执行以下操作来模仿它。

 public overrides List getSpaceballs { get { return new List ( new String[] {"abc","def","egh"} ); } } 

请注意,这会产生一些计算开销。