У меня есть сценарий, где у меня есть пользовательский класс отображения.
Я хотел бы иметь возможность создать новый экземпляр и объявить данные для него одновременно и реализовать синтаксис, подобный:
public static HybridDictionary Names = new HybridDictionary()
{
{People.Dave, "Dave H."},
{People.Wendy, "Wendy R."}
}
и так далее. Как я определяю свой класс для включения этого вида синтаксиса?
Вы пытаетесь получить Инициализатор коллекции
Ваш класс HybridDictionary должен реализовать IEnumerable<> и иметь метод Add вида:
public void Add(People p, string name)
{
....
}
Тогда ваше инстанцирование должно работать.
Примечание: По соглашению, ключ должен быть первым параметром, за которым должно следовать значение (т.е. void Add(string key, People value).
В принципе, необходимо реализовать ICollection
В статье Мэдс Торгерсен объясняет, что используется шаблонный подход, поэтому единственным требованием является наличие публичного метода Add с правильными параметрами и реализация IEnumerable. Другими словами, этот код действителен и работает:
using System.Collections;
using System.Collections.Generic;
class Test
{
static void Main()
{
var dictionary = new HybridDictionary<string, string>
{
{"key", "value"},
{"key2", "value2"}
};
}
}
public class HybridDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>
{
private readonly Dictionary<TKey, TValue> inner = new Dictionary<TKey, TValue>();
public void Add(TKey key, TValue value)
{
inner.Add(key, value);
}
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
return inner.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}