Могу ли я использовать инициализатор коллекции для моего класса, который имеет метод Add
, который принимает общий параметр?Инициализатор коллекции в параметре Add method generic?
Мой класс выглядит следующим образом:
public class FooCollection : IEnumerable<KeyValuePair<string, Type>>
{
private readonly IDictionary<string, Type> _directory = new Dictionary<string, Type>();
public void Add<T>(string name)
{
_directory.Add(name, typeof(T));
}
public IEnumerator<KeyValuePair<string, Type>> GetEnumerator()
{
return _directory.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _directory.GetEnumerator();
}
}
я могу сделать:
var collection = new FooCollection();
collection.Add<Foo>("Foo");
collection.Add<Bar>("Bar");
collection.Add<Baz>("Baz");
Но я хотел бы использовать коллекцию инициализатор. Я могу это сделать? Как?
Это не имеет смысла. Если вы назовите его так же, как класс, когда вы когда-нибудь будете иметь тот же класс с другим именем класса? Вы хотите создать экземпляр всего словаря сразу? Тогда почему у вас есть метод добавления? Просто сделайте свой словарь каталогов общедоступным, а затем инициализатор коллекции, как и в любом другом месте. – Dispersia
Поскольку словарь может принимать только экземпляры объектов. Вы не можете вставить тип в словарь, не делая '.Add (typeof (Foo),« Foo »)' и использование 'typeof' является уродливым, также вы не можете ограничить тип определенным типом, например' Foo' или любой класс, который происходит от 'Foo'. – Fred