使用C#中的集合初始化器创建新类

4
我有一个自己创建的类。我希望让这个类能够拥有集合初始化器。以下是这个类的示例代码:

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"}
}

在不使用字典和列表的情况下,这种方法是否可行呢?
3个回答

12

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

糟糕...看起来我们同时在写我们的... - James Michael Hare

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接