在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"} } 之前

对于字典和列表以外的类是否可以这样做?

在c#中用集合初始化器创建一个新类

除了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();
    }
}