4 Stimmen

Unboxing-Objekt, das einen Wert enthält, von dem bekannt ist, dass er einer Integer-Variablen zugewiesen werden kann

Wenn ich eine object Instanz und ich weiß, es ist eigentlich ein boxed Integer, dann kann ich einfach es zurück zu int wie diese:

object o = GetSomethingByName("foo"); 
int i = (int)o;

Ich weiß jedoch nicht, dass der Wert eine ganze Zahl ist. Ich weiß nur, dass er einer ganzen Zahl zugeordnet werden kann. Zum Beispiel könnte es eine byte und der obige Code würde Folgendes auslösen InvalidCastException in diesem Fall. Stattdessen müsste ich dies tun:

object o = GetSomethingByName("foo"); 
int i = (int)(byte)o;

Der Wert könnte auch ein short oder etwas anderes, das einem int . Wie kann ich meinen Code verallgemeinern, um all diese Fälle zu behandeln (ohne jede Möglichkeit einzeln zu behandeln)?

5voto

Wim Coenen Punkte 64891

Allein das Schreiben dieser Frage hat mich daran erinnert, dass es eine Convert Klasse. Das scheint zu funktionieren:

int i = Convert.ToInt32(o);

bearbeiten Aber leider führt es auch Typkonvertierungen durch, die ich eigentlich nicht will, wie das Parsen von Strings.

2voto

Peter Lillevold Punkte 32995

Es ist interessant zu sehen, wie Convert.ToInt32 führt die Umwandlung durch:

    public static int ToInt32(object value) 
    {
        return value == null? 0: ((IConvertible)value).ToInt32(null); 
    } 

Der Trick besteht darin, das Objekt in IConvertible .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X