Warum tut (int)(object)10m werfen "die Angegebene Umwandlung ist ungültig" Ausnahme?
Warum diese explizite cast macht werfen Specified cast is not valid.
Ausnahme ?
decimal d = 10m;
object o = d;
int x = (int)o;
Aber das funktioniert:
int x = (int)(decimal)o;
mögliche Duplikate von Warum kann ich nicht unbox einen int als Dezimalzahl?
InformationsquelleAutor Homam | 2010-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Boxed-Wert kann nur ohne Verpackung in eine variable gleichen Typs. Dieses scheinbar sonderbare Einschränkung ist eine sehr wichtige Geschwindigkeits-Optimierung gemacht .NET 1.x durchführbar, bevor Generika zur Verfügung standen. Sie können mehr darüber Lesen Sie in diese Antwort.
Wollen Sie nicht springen durch die mehrfach-cast hoop, einfache Wert-Typen implementieren, die die IConvertible-Schnittstelle. Die Sie aufrufen, indem Sie mithilfe der Convert-Klasse:
InformationsquelleAutor Hans Passant
Wenn Sie dies tun, sind Sie implizit Boxen dezimal
d
zu einem grundlegenden Objekt:Können Sie cast boxed-Werte direkt ohne ersten unboxing, weshalb casting direkt ein int, wie in der folgenden fehl:
Jedoch, dies zu tun (Intermediär Umwandlung in eine Dezimalzahl zuerst):
Du bist die erste unboxing
o
, was bedeutet, du bist abrufen die decimal-Wert dann casting ohne Verpackung decimal-Wert in einen int, und das funktioniert auch, weil C# unterstützt casting-decimals, Ganzzahlen.InformationsquelleAutor BoltClock
decimal
hat eine expliziten cast-operator zuint
.object
nicht:InformationsquelleAutor Frédéric Hamidi
Was Sie brauchen, zu denken, hier ist das boxing und unboxing ist nicht gerade eine Art der Umwandlung. Sie nur "wrap" den Objekt-Typ "um" die erste dezimal-Typ. Das ist, warum Sie benötigen, um unbox das Objekt zuerst, bevor Sie in der Lage, es zu konvertieren in eine Ganzzahl.
InformationsquelleAutor Semyazas