在c#中用集合初始化器创建一个新类
本文关键字:新类 一个 创建 集合 初始化 | 更新日期: 2023-09-27 18:12:28
我创建了一个类。我想允许类能够有一个集合初始化器。下面是该类的一个示例:
<>之前
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"}
}
之前对于字典和列表以外的类是否可以这样做?
除了Add
方法外,该类还必须实现IEnumerable
接口。
参见:对象和集合初始化式(c#编程指南)
是有可能的。实际上,你自己就快解出来了。使用这样的集合初始化器的要求是一个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();
}
}
是的,正如其他答案所述(只是为了提供更多细节),只需实现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();
}
}