Mam następujące metody w klasie zewnętrznejIDictionary <,> Kontrawariancja?
public static void DoStuffWithAnimals(IDictionary<string, Animal> animals)
W moim kodu wywołującego, mam już Dictionary<string, Lion>
obiekt, ale nie mogę przekazać to jako argument w tej metodzie jest. Więc IDictionary<,>
nie jest sprzeczny? Nie widzę żadnego powodu, dla którego to nie powinno działać.
Jedynym rozwiązaniem można myślę, jest:
var animals = new Dictionary<string, Animal>();
foreach(var kvp in lions) {
animals.Add(kvp.Key, kvp.Value);
}
Czy istnieje żaden sposób, aby zdać ten słownik w ten sposób, bez konieczności tworzenia nowego słownika tych samych obiektów?
EDIT:
Jak to jest moja metoda, wiem, że jedynym członkiem używam ze słownika jest getter od TValue this[TKey key]
, który jest członkiem IDictionary<TKey, TValue>
, więc w tym scenariuszu , Nie mogę użyć parametru "szerszy" dla parametru.
IDictionary wydaje się być niezmienna. Jego deklaracja nie zawiera szczegółów wejścia/wyjścia. –