Создание нового класса с инициализаторами коллекции в C#

У меня есть класс, который я создал. Я хотел бы позволить классу иметь инициализатор коллекции. Вот пример класса:


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 ответа

В дополнение к Add метод, класс должен также реализовать IEnumerable интерфейс.

См. Также: Инициализаторы объектов и коллекций (Руководство по программированию в C#)

Да, как указано в других ответах (просто, чтобы дать более подробную информацию), просто реализовать 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();
    }
}

Да, это возможно. На самом деле, вы почти решили это сами. Требования для использования инициализатора коллекции, как это, является 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();
    }
}
Другие вопросы по тегам