外部クラスに次のメソッドがあります
public static void DoStuffWithAnimals(IDictionary<string, Animal> animals)
呼び出しコードには既にDictionary<string, Lion>
オブジェクトがありますが、これをこのメソッドの引数として渡すことはできません。では、aIDictionary<,>
は反変ではありませんか? これがうまくいかない理由がわかりません。
私が考えることができる唯一の解決策は次のとおりです。
var animals = new Dictionary<string, Animal>();
foreach(var kvp in lions) {
animals.Add(kvp.Key, kvp.Value);
}
同じオブジェクトの新しい辞書を作成せずに、この辞書をこのメソッドに渡す方法はありませんか?
編集:
それが私の方法であるため、辞書から使用している唯一のメンバーTValue this[TKey key]
は のメンバーであるのゲッターであることを知っているIDictionary<TKey, TValue>
ため、このシナリオでは、パラメーターに「より広い」タイプを使用できません。