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.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage