IDictionary<TKey, TValue>
.NET 4 / Silverlight 4 では共分散がサポートされていません。
IDictionary<string, object> myDict = new Dictionary<string, string>();
s で今できることと類似していIEnumerable<T>
ます。
おそらくKeyValuePair<TKey, TValue>
共変ではないことにも要約されます。少なくとも値については、辞書で共分散を許可する必要があると思います。
それで、それはバグですか、それとも機能ですか?おそらく .NET 37.4 で実現するのでしょうか?
更新(2年後):
IReadOnlyDictionary<TKey, TValue>
.NET 4.5 には がありますが、共変にはなりません。:·/
これは から派生したものであり、インターフェイスではないため、IEnumerable<KeyValuePair<TKey, TValue>>
共KeyValuePair<TKey, TValue>
変にはなりません。
BCL チームは、代わりにいくつかを使用するために、多くを再設計する必要がありますICovariantPair<TKey, TValue>
。また、厳密に型指定されたインデクサーthis[TKey key]
などは、共変インターフェイスでは使用できません。GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
同様の目的は、実際の実装を内部的に呼び出さなければならない拡張メソッドをどこかに配置することによってのみ達成できます。これは、間違いなく非常に面倒なアプローチのように見えます。