Die IDictionary<TKey, TValue>
in .NET 4/Silverlight 4 nicht Kovarianz nicht unterstützt, dh ichIDictionary <TKey, TValue> in .NET 4 nicht kovariant
IDictionary<string, object> myDict = new Dictionary<string, string>();
analog zu dem, was ich tun kann, mit IEnumerable<T>
s jetzt.
Wahrscheinlich kocht die KeyValuePair<TKey, TValue>
auch nicht kovariant. Ich denke, dass die Kovarianz zumindest für die Werte in Wörterbüchern erlaubt sein sollte.
Also ist das ein Fehler oder eine Funktion? Wird es jemals kommen, vielleicht in .NET 37.4?
UPDATE (2 Jahre später):
Es wird eine IReadOnlyDictionary<TKey, TValue>
in .NET 4.5, aber es wird auch nicht :·/
kovariant werden, weil sie von IEnumerable<KeyValuePair<TKey, TValue>>
ableitet, und KeyValuePair<TKey, TValue>
ist keine Schnittstelle und kann somit nicht kovariant sein.
Das BCL-Team würde viel umgestalten müssen, um zu kommen und stattdessen ICovariantPair<TKey, TValue>
zu verwenden. Auch stark typisierte Indexer á la this[TKey key]
sind für kovariante Schnittstellen nicht möglich. Ein ähnliches Ende kann nur erreicht werden, indem irgendwo eine Erweiterungsmethode platziert wird, die intern eine tatsächliche Implementierung nennen müsste, was wohl ein ziemlich chaotischer Ansatz ist.
Dank für die Bereitstellung der Aktualisierung auf .NET 4.5. IMHO wäre es nützlich, Kovarianz in einem schreibgeschützten Wörterbuch zu haben, also ist es zu schade, dass es nicht so aussieht, als ob es unterstützt wird. – dcstraw