集合初始化器是否与LINQ相关,就像对象初始化器一样?

时间:2011-12-02 02:35:30

标签: linq collection-initializer

我正在阅读关于LINQ并看到Collection Initialzers出现的问题,但它是否与像Object Initializers这样的LINQ直接相关呢?

List<string> stringsNew = new List<string> { "string 1", "string 2" };

2 个答案:

答案 0 :(得分:3)

收集初始化程序可以说与Linq有关,因为你可以感谢Linq的功能made it into C# 3。如果链接问题发生了某些事情,那么有用的文字就是

  

由设计的典型使用场景推动的设计目标   初始化器是为了初始化现有的集合类型   可能在表达式语法中,以便集合初始值设定项可以   嵌入查询理解或转换为表达式树。

     

其他每个场景的优先级都较低; 该功能完全存在   因为它有助于LINQ工作。

     

-Eric Lippert

它们在Linq的上下文中很有用,因为它们使您能够编写类似下面示例的内容

var query = from foo in foos 
            select new Bar 
            {
                ValueList = new List<string> { foo.A, foo.B, foo.C }
            };

您可以使用foo属性值列表构建一个将给定foo投影到Bar的查询。如果没有这样的初始化程序支持,您就无法创建这样的查询(尽管您可以将ValueList转换为静态长度数组并实现类似的功能)。

但是,就像对象初始化程序和C#3+中新增的其他功能一样,许多启发或明确添加Linq工作的功能毫无疑问在与Linq没有任何关系的代码中有用,并且它们不需要Linq工作(通过using指令或DLL引用)。初始化器最终只不过是语法糖,编译器将变成你在早期语言版本中自己编写的更长的代码。

答案 1 :(得分:0)

Object and Collection Initializers与LINQ无关 - 它们是一种完全不相关的语言功能。

使用Add方法实现IEnumerable的任何类都可以使用集合初始值设定项。大括号中的项目将一次添加一个,而不必重复调用inst.Add(item1)