[Gelöst] Unboxing + Konvertierung



  • Hallo,

    Mir ist gerade folgendes aufgefallen:

    sbyte foo = 42;
    object bar = foo;
    var qux = (int)bar; // InvalidCastException
    

    Man darf nicht Unboxing und Konvertierung in einem Schritt machen. Die technische Begründung leuchtet mir ein (zwischen sbyte und int besteht keine Beziehung, welche bei der Konvertierung von Referenztypen und Boxings angenommen wird).

    Aber muss ich nun wirklich eine eigene Konvertierung schreiben?

    $Edit: Habs so gelöst:

    public T UnboxOperandAs<T>() where T : struct
            {
                return (T)Convert.ChangeType(this.Operand, typeof(T));
            }
    


  • Du kannst auch gleich

    sbyte foo = 42;
    object bar = foo;
    var qux = Convert.ToInt32(bar); // OK
    

    machen.

    Deine Generic-Funktion macht es nur nochmal um ein (vermutlich kleines) Stück langsamer. Wenn du sie also nicht brauchst... ruf direkt die passenden Convert Funktionen auf.


Log in to reply