2011-12-02 36 views

回答

3

集合初始化,可以说,你可以感谢的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引用)。初始化器最终只不过是语法糖,编译器会变成更早的代码,而这些代码将不得不在早期语言版本中编写。

+0

完美的例子,谢谢! –

0

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

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

+0

虽然他们当然没有绑定在一起,我还是不会说*无关*。 C#3的许多功能都在那里,只是因为他们让Linq工作。他们在Linq之外工作的事实会带来好处。 –

相关问题