.NET 4/Silverlight 4'teki IDictionary<TKey, TValue>
kovaryansı desteklemiyor, yani IEnumerable<T>
s ile yapabileceğim şeye.NET'te IDictionary <TKey, TValue> eşdeğeri değil
IDictionary<string, object> myDict = new Dictionary<string, string>();
analog yapamıyorum.
Muhtemelen, KeyValuePair<TKey, TValue>
'e eşdeğerde kovaryant olmadığından aşağı doğru kaymaktadır. En azından değerler için sözlükte kovaryansa izin verilmesi gerektiğini hissediyorum.
Bu bir hata mı yoksa bir özellik mi? Hiç gelebilir mi, belki .NET 37.4?
UPDATE (2 yıl sonra):
.NET 4.5 IReadOnlyDictionary<TKey, TValue>
olacaktır, ancak :·/
'den türetilmediği için :·/
kovaryantı olmayacaktır, çünkü IEnumerable<KeyValuePair<TKey, TValue>>
'ten türetilmiştir ve KeyValuePair<TKey, TValue>
bir arabirim değildir ve kovaryant olamaz.
BCL ekibi, gelmek için bir çok şeyi yeniden tasarlamak ve yerine ICovariantPair<TKey, TValue>
kullanmak zorunda kalacaktı. Ayrıca, güçlü yazılan dizinleyiciler á la this[TKey key]
, kovaryant arayüzler için mümkün değildir. Benzer bir son sadece, bir şekilde içsel olarak gerçek bir uygulamayı çağırmak zorunda kalacak bir uzatma metodu GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
yerleştirilerek elde edilebilir, ki bu oldukça karmaşık bir yaklaşıma benzemektedir.
Teşekkür .NET 4.5 üzerinde güncelleştirme sağlanması için: Eğer baz türleri ve türetilen türleri, aşağıdaki eserleri ile uğraşıyoruz varsayarsak. IMHO, salt okunur bir sözlükte kovaryansa sahip olmanın yararı olacaktır, bu yüzden desteklenecek gibi görünmeyecek kadar kötüdür. – dcstraw