Das Umwandeln von IList <string> in IList <object> schlägt zur Laufzeit fehl
Ich habe das folgende kurze C # -Programm:
IList<string> listString = new List<String>();
IList<object> listObject;
listObject = listString;
Dieses Programm kompiliert nicht. Die letzte Zeile verursacht den folgenden Kompilierungsfehler:
Der Typ 'System.Collections.Generic.IList' kann nicht implizit in 'System.Collections.Generic.IList' konvertiert werden. Es liegt eine explizite Konvertierung vor (Fehlt Ihnen eine Besetzung?)
Also habe ich die Besetzung hinzugefügt:
listObject = (IList<object>)listString;
Jetzt kompiliert das Programm ordnungsgemäß, schlägt jedoch zur Laufzeit fehl. EinInvalidCastException
wird mit der folgenden Meldung ausgelöst:
Objekt vom Typ 'System.Collections.Generic.List'1 [System.String]' kann nicht in 'System.Collections.Generic.IList'1 [System.Object]' umgewandelt werden.
Entweder ist die Umwandlung illegal und sollte vom Compiler abgefangen werden, oder sie ist legal und sollte zur Laufzeit keine Ausnahme auslösen. Warum das inkonsistente Verhalten?
Erklärung: Ich frage nicht, warum die Besetzung fehlschlägt. Ich verstehe, warum ein solches Casting problematisch ist. Ich frage, warum die Besetzung fehlschlägtnur zur Laufzeit.