C# 初始化内联列表

C# 初始化内联列表,c#,C#,我在执行此操作时遇到一个奇怪的错误:(.NET2.0) 第一个选项不合法:) 只能在数组上执行该类型的初始化器 --编辑:见帖子(和其他,见下文);它仅在v3及以上版本中可用 --再次编辑: 需要明确的是,如果您的编译器的值为3或更高,您可以将目标设置为2.0,以使其正常工作(因为它被编译为下面Andrew显示的代码)。但是如果你的编译器是2,那么你就不能了。C#只在版本3和更高版本中受支持(因为你提到了.NET 2.0,我假设你也在使用C#2)。这可能有点让人困惑,因为C#一直支持类似的数组初

我在执行此操作时遇到一个奇怪的错误:(.NET2.0)


第一个选项不合法:)

只能在数组上执行该类型的初始化器

--编辑:见帖子(和其他,见下文);它仅在v3及以上版本中可用

--再次编辑:

需要明确的是,如果您的编译器的值为3或更高,您可以将目标设置为2.0,以使其正常工作(因为它被编译为下面Andrew显示的代码)。但是如果你的编译器是2,那么你就不能了。

C#只在版本3和更高版本中受支持(因为你提到了.NET 2.0,我假设你也在使用C#2)。这可能有点让人困惑,因为C#一直支持类似的数组初始化语法,但实际上并不是一回事

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

var list = new List<String> { "foo", "bar" };
var list=新列表{“foo”,“bar”};
但是,编译器会将此语句转换为:

List<String> <>g__initLocal0 = new List<String>();
<>g__initLocal0.Add("foo");
<>g__initLocal0.Add("bar");
List<String> list = <>g__initLocal0;
List g_uuinitlocal0=new List();
g_uuinitlocal0.Add(“foo”);
g_uuinitlocal0.Add(“bar”);
List List=g_uuinitlocal0;

正如您所看到的,该功能是一种语法糖分,它将模式简化为单个表达式。

正如其他用户所指出的,这在2.0中是不受支持的。但是,您可以通过执行以下操作来模拟它

public overrides List<String> getSpaceballs
{
   get { return new List<String> ( new String[] {"abc","def","egh"} ); }
}
公共覆盖列表getSpaceballs
{
获取{返回新列表(新字符串[]{“abc”、“def”、“egh”});}
}

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

为了防止现在有人也会搜索它,有一种使用LINQ扩展的简洁方法。希望它能帮助别人;)


集合初始值设定项是在C#3.0中添加的。当他询问框架版本2.0时,你能区分框架版本和编译器版本吗?我不明白你的意思。我认为审查安德鲁职位的迹象已经足够;不管怎样,OP明确表示他在使用2.0。@silky:OP明确表示他在某些方面在使用.NET2.0。他没有明确说明是使用.NET2.0还是以.NET2.0为目标。两者都可以很容易地理解为“使用”2.0。
List<String> <>g__initLocal0 = new List<String>();
<>g__initLocal0.Add("foo");
<>g__initLocal0.Add("bar");
List<String> list = <>g__initLocal0;
public overrides List<String> getSpaceballs
{
   get { return new List<String> ( new String[] {"abc","def","egh"} ); }
}
var list = new string[]{ "1", "2", "3" }.ToList();