Sehen Sie im folgenden Code-Schnipsel:Warum schlägt Upcasting IDictionary <TKey, TValue> zu IEnumerable <object> fehl?
(IEnumerable<object>)new Dictionary<string, string>()
Die obige Besetzung wird eine ungültige Cast Exception werfen.
Tatsächlich IDictionary<TKey, TValue>
implementiert auch indirekt IEnumerable<out T>
, weil es auch implementiert ICollection<T>
. Das heißt, die gesamte Besetzung sollte gültig sein.
In der Tat für mich, es ist noch seltsamer, dass Schlitz sehen, wenn ich die ganze Besetzung auf einem Debugger ausführen, es funktioniert!
Was ist los?
@PatrickHofman Warum funktioniert es nicht? Es gibt nur eine Schnittstelle namens IEnumerable ', die einen kovarianten Typparameter hat. Auch wenn die Kovarianz nicht mit Werttypen funktioniert ............. Täusche ich mich? –
@CodeCaster Ich meine, dass die Schnittstelle selbst ist IEnumerable ' –
@CodeCaster Argh, https://msdn.microsoft.com/en-us/library/9eekhta0(v=vs.110).aspx –