我正在阅读一些c#源代码codes.And --有些东西混淆了me.In的以下代码,OptionSet是从类KeyedCollection继承的,当OptionSet像下面这样初始化时,它将首先调用OptionSet()来获得一个新的但空的OptionSet,然后调用Add()两次以插入{“h-?”、v- =>语法( } )和{ "analyzer=",v=>分析器=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){...}
...
}发布于 2015-12-29 02:09:45
当你这样做时:
var p = new AnyCollection()
{
...
}您正在使用集合初始化器。
来自这里
集合初始化器可以在初始化实现IEnumerable的集合类或具有添加扩展方法的类时指定一个或多个元素初始化器。元素初始化器可以是简单值、表达式或对象初始化器。通过使用集合初始化器,您不必在源代码中指定对类的Add方法的多次调用;编译器将添加调用.。
https://stackoverflow.com/questions/34503257
复制相似问题