我在阅读关于LINQ并看到Collection Initialzers出现,但是它确实直接与像对象初始化器那样的LINQ相关吗?无论如何,对象初始值设定项的集合初始化程序是否与LINQ有关?
List<string> stringsNew = new List<string> { "string 1", "string 2" };
我在阅读关于LINQ并看到Collection Initialzers出现,但是它确实直接与像对象初始化器那样的LINQ相关吗?无论如何,对象初始值设定项的集合初始化程序是否与LINQ有关?
List<string> stringsNew = new List<string> { "string 1", "string 2" };
集合初始化,可以说,你可以感谢的LINQ的功能made it into C# 3要在迄今有关Linq的。万一事情没发生过的链接的问题,有用文字
的通过设计的典型使用场景集合 初始化激励的目标是使现有的集合类型 可能的初始化表达式中的语法,使集合初始化器可将 嵌入到查询解析中或转换为表达式树。
每隔一个场景的优先级较低; 该功能在所有 都存在,因为它有助于使LINQ工作。
-Eric利珀特
,因为他们给你写的东西,如下面的例子
var query = from foo in foos
select new Bar
{
ValueList = new List<string> { foo.A, foo.B, foo.C }
};
在那里你可以构造一个查询项目的能力他们是在LINQ的背景下有用一个给定foo
到一个Bar
与foo的属性值列表。没有这样的初始化支持,你不能创建这样的查询(尽管你可以将ValueList变成一个静态长度的数组并实现类似的功能)。但是,与对象初始值设定项和其他C#3+中的新特性一样,为了使Linq工作而激发或添加的许多特性无疑对于与Linq完全没有任何关系的代码非常有用,而且它们不会要求Linq工作(通过使用指令或DLL引用)。初始化器最终只不过是语法糖,编译器会变成更早的代码,而这些代码将不得不在早期语言版本中编写。
Object and Collection Initializers与LINQ无关 - 它们是完全不相关的语言功能。
任何具有Add
方法的类实现IEnumerable
都可以使用集合初始值设定项。大括号中的项目将逐个添加,而不必重复呼叫inst.Add(item1)
。
虽然他们当然没有绑定在一起,我还是不会说*无关*。 C#3的许多功能都在那里,只是因为他们让Linq工作。他们在Linq之外工作的事实会带来好处。 –
完美的例子,谢谢! –