在C#中,您可以初始化数组和其他对象,例如Lists,甚至是Dictionaries,如下所示:
Type[] array = new Type[] { new Type(), new Type(), new Type()...};
或更奇怪的是,字典:
Dictionary<string, object> dictionary = new Dictionary<string, object> () {
{ "key1", value },
{ "key2", value }
};
我如何为自己的对象类型编写构造函数?就我而言,我想将它用于我命名为LayerGroup
的对象:
LayerGroup layers = new LayerGroup() {
"background",
"foreground",
"menu",
"entities"
};
我也想知道如何用词典风格来做这件事:
LayerGroup layers = new LayerGroup() {
{ 4, "background" },
{ 1, "foreground" },
{ 0, "menu" },
{ 3, "entities" }
};
(在这种情况下,我当然会为LayerGroup类提供不同的结构,这只是一个例子)
答案 0 :(得分:5)
要获取集合初始值设定项,您需要实现2个方法并从IEnumerable
继承您的类:
public class LayerGroup: IEnumerable
{
private readonly IList<string> _collection = new List<string>();
public void Add(string value)
{
_collection.Add(value);
}
public IEnumerator GetEnumerator()
{
return _collection.GetEnumerator();
}
}
同样,如果你想得到“类似于字典”的初始化,你需要实现
public void Add(string key, string value)
{
...
}
或整个IDictionary
界面,如果您想获得全部字典功能。
答案 1 :(得分:3)
数组样式初始值设定项称为 Collection Initializers 。为了使集合初始值设定器起作用,正在初始化的对象需要实现IEnumerable
,并提供相应的Add
方法,其签名与您计划提供的参数相匹配。
因此LayerGroup
类需要包含Add
方法,如下所示:
public void Add(string name);
这将允许您使用类似列表的初始化程序初始化LayerGroup
。如果你提供像这样的Add
方法
public void Add(int number, string name);
您可以使用类似字典的初始化程序(即您问题中的最后一个代码段)。