У меня есть следующий метод во внешнем классе
public static void DoStuffWithAnimals(IDictionary<string, Animal> animals)
В моем кодовом коде у меня уже есть объект Dictionary<string, Lion>
, но я не могу передать это как аргумент метода. Итак, a IDictionary<,>
не является контравариантным? Я не вижу причин, почему это не должно работать.
Единственное решение, о котором я могу думать, это:
var animals = new Dictionary<string, Animal>();
foreach(var kvp in lions) {
animals.Add(kvp.Key, kvp.Value);
}
Нет ли способа передать этот словарь в этот метод, не создавая новый словарь тех же объектов?
EDIT:
Как и мой метод, я знаю, что единственный член, который я использую из словаря, является получателем TValue this[TKey key]
, который является членом IDictionary<TKey, TValue>
, поэтому в этом случае я не могу использовать "более широкий" тип для параметра.