我正在阅读一些c#源代码。有些东西让我感到困惑。在下面的代码中,OptionSet继承自KeyedCollection类,当OptionSet初始化如下所示时,它会首先调用OptionSet()来获取新的但是空的OptionSet,然后调用Add()两次以插入{" h |?| help",v =>语法()}和{" analyzer =",v => analyzer = v}。
我想知道为什么会这样初始化,为什么要使用Add()?
var p = new OptionSet()
{
{ "h|?|help", v => Syntax() },
{ "analyzer=", v => analyzer = v },
}
public class OptionSet : KeyedCollection<string, Option>{
public OptionSet ()
{
}
public OptionSet Add (string prototype, Action<string> action){...}
...
}
答案 0 :(得分:1)
执行此操作时:
var p = new AnyCollection()
{
...
}
您正在使用Collection initializers。
来自here:
集合初始值设定项允许您指定一个或多个元素 初始化实现的集合类时的初始化程序 IEnumerable或具有Add扩展方法的类。元素 初始化器可以是简单的值,表达式或对象 初始化。通过使用集合初始值设定项,您不必 指定对源中类的Add方法的多次调用 的的代码;编译器添加了调用。