我正在阅读关于LINQ并看到Collection Initialzers出现的问题,但它是否与像Object Initializers这样的LINQ直接相关呢?
List<string> stringsNew = new List<string> { "string 1", "string 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)
。