Wenn ein Werttyp eingerahmt ist, wird er innerhalb eines nicht typisierten Referenzobjekts platziert. Also, was verursacht die ungültige Cast Ausnahme hier?Wie kennt die CLR den Typ eines Boxed-Objekts?
long l = 1;
object obj = (object)l;
double d = (double)obj;
Intersting, dank Jon. Wagners Effektives C# besagt: "Boxen platziert einen Werttyp in ein nicht typisiertes Bezugsobjekt". Ich bin mir ziemlich sicher, dass es auch etwas zu dem Effekt sagt, dass Boxed-Objekte keine Typ-Metadaten enthalten, obwohl ich dieses spezielle Zitat gerade nicht finden kann. Beim Lesen dieses Buches kam mir die Frage. – fearofawhackplanet
@fearofawhackplanet: Ich möchte Bill nicht in die Quere kommen, was genau er damit meint - aber das Box-Objekt kennt definitiv seinen ursprünglichen Typ, einschließlich Enums. (Box einen Enum-Wert und dann ToString direkt ohne Entpacken für den Beweis :) –
Ich glaube, eine gute Demonstration ist das. 'lang l = 40L; Objekt o = (Objekt) l; Console.WriteLine (o.GetType()); 'In diesem Fall wird System.Int64 auf dem Bildschirm gedruckt. Auch wenn "o" ein Objekt ist, ist der zugrunde liegende Typ immer noch lang. –