tengo el siguiente método en una clase externaIDictionary <,> contravariancia?
public static void DoStuffWithAnimals(IDictionary<string, Animal> animals)
En mi código de llamada, ya tengo un objeto Dictionary<string, Lion>
, pero no puedo dejar pasar esto en el argumento de que este método. Entonces, ¿IDictionary<,>
no es contravariante? No veo ninguna razón por la cual esto no debería funcionar.
La única solución que se me ocurre es:
var animals = new Dictionary<string, Animal>();
foreach(var kvp in lions) {
animals.Add(kvp.Key, kvp.Value);
}
¿No hay manera de pasar este diccionario en este método, sin tener que crear un nuevo diccionario de los mismos objetos?
EDIT:
Como es mi método, sé que el único miembro que estoy usando desde el diccionario es el captador de TValue this[TKey key]
, que es miembro de IDictionary<TKey, TValue>
, por lo que en este escenario , No puedo usar un tipo "más amplio" para el parámetro.
IDictionary parece ser invariante. Su declaración no contiene detalles de entrada/salida. –