我有一个我创建的课程。我想允许该类能够拥有一个集合初始化器。以下是该类的示例:
public class Cat
{
private Dictionary catNameAndType = new Dictionary();
public Cat()
{
}
public void Add(string catName, string catType)
{
catNameAndType.Add(catName,catType);
}
}
我希望能够在课堂上做这样的事情:
Cat cat = new Cat()
{
{"Paul","Black"},
{"Simon,"Red"}
}
这可能与不是词典和列表的类有关吗?
答案 0 :(得分:12)
除了Add
方法之外,该类还必须实现IEnumerable
接口。
另请参阅:Object and Collection Initializers (C# Programming Guide)
答案 1 :(得分:1)
是的,有可能。实际上,你几乎自己解决了这个问题。使用像这样的集合初始化程序的要求是一个Add
方法,它接受两个方法(你有),并且该类型实现IEnumerable(你缺少它)。所以要让你的代码工作;使用类似的东西:
public class Cat : IEnumerable<KeyValuePair<string,string>>
{
private Dictionary<string,string> catNameAndType = new Dictionary<string,string>();
public Cat()
{
}
public void Add(string catName, string catType)
{
catNameAndType.Add(catName,catType);
}
public IEnumerator<KeyValuePair<string,string>> GetEnumerator()
{
return catNameAndType.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
答案 2 :(得分:1)
是的,正如其他答案中所述(只是为了提供更多细节),只需实施IEnumerable<T>
并拥有一些Add()
方法:
// inherit from IEnumerable<whatever>
public class Cat : IEnumerable<KeyValuePair<string,string>>
{
private Dictionary<string, string> catNameAndType = new Dictionary<string, string>();
public Cat()
{
}
// have your Add() method(s)
public void Add(string catName, string catType)
{
catNameAndType.Add(catName, catType);
}
// generally just return an enumerator to your collection
public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
{
return catNameAndType.GetEnumerator();
}
// the non-generic form just calls the generic form
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}