Dass das nicht geht …

int _int = 42;
Object _object = _int;
long _long = (long) _object;

Grundsätzlich kann man natürlich sehr wohl ein int in einen long konvertieren. Ein C#-int kann Werte von –231 bis 231–1 aufnehmen, C#-long schafft sogar –263 bis 263–1, das passt also “dicke” ;)

Würde es auch, denn selbst mein Visual Studio weiß natürlich, was in meinem _object steckt:
image

In Erinnerung an meine Compilerbau Vorlesungen dämmert mir jedoch, dass das Problem schon früher passiert: int und long sind in C# Wertetypen auf dem Stack und beim Cast wird versucht diesen Wert entsprechend dem definierten Typen zu interpretieren. Beim Versuch die int32 Struktur als int64 zu interpretieren wird die InvalidCastException, eigentlich ja auch richtig so …

3 Reaktionen zu “Dass das nicht geht …”

  1. Jensi

    …wer versucht denn auch so was :-) tz…

  2. eike

    ja, ich … doof ;)

  3. milen

    du bist ein Freak!

Einen Kommentar schreiben