Ich habe die folgende Methode in einer externen KlasseIDictionary <,> Kontravarianz?
public static void DoStuffWithAnimals(IDictionary<string, Animal> animals)
In meinem Beruf Code, ich habe bereits ein Dictionary<string, Lion>
Objekt, aber ich kann dies nicht als dieses Verfahrens des Argument übergibt in. Also eine IDictionary<,>
ist nicht kontravariant? Ich kann keinen Grund sehen, warum das nicht funktionieren sollte.
Die einzige Lösung, die ich denken kann ist:
var animals = new Dictionary<string, Animal>();
foreach(var kvp in lions) {
animals.Add(kvp.Key, kvp.Value);
}
Gibt es keine Möglichkeit, dieses Wörterbuch in diese Methode zu übergeben, ohne ein neues Wörterbuch der gleichen Objekte erstellen zu müssen?
EDIT:
Da es meine Methode ist, weiß ich, dass das einzige Mitglied ich aus dem Wörterbuch verwendet habe, ist der Getter von TValue this[TKey key]
, die ein Mitglied von IDictionary<TKey, TValue>
ist, so dass in diesem Szenario , Ich kann keinen 'breiteren' Typ für den Parameter verwenden.
IDictionary scheint unveränderlich zu sein. Seine Deklaration enthält keine In/Out-Details. –