Es ist immer wieder ein leidiges Problem, wenn man eine generische Methode geschrieben hat und den Wert darin in einen speziellen Type konvertieren will. Auch wenn man weiß, dass der Type T eines bestimmten wertes zum Beispiel ein Int32 ist, wehrt sich der Compiler vehement dagegen, diesen Wert in einen Int32 zu konvertieren.

public Int32 convert<T>(T value)
{
    if (value is Int32)
        return (Int32)value;
    return default(Int32);
}

Der Compiler wird beim unboxing von value in Int32 mit folgender Fehlermeldung meckern:

Eine Konvertierung vom Typ „T“ in „int“ ist nicht möglich.

und das obwohl man ja sicher sein kann, dass es sich bei „value“ um einen Int32 handelt auf Grund der vorhergegangen Überprüfung.

Jetzt gibt es aber einen ganz einfachen Workaround. Man kann nämlich den Type „object“ in alles mögliche konvertieren. Und außerdem ist es möglich, T in object zu konvertieren. Also muss man ein bisschen mehr schreiben, um das gewünscht Ziel zu erreichen:

public Int32 convert<T>(T value)
{
    if (value is Int32)
    {
        object o = value;
        return (Int32)o;
    }
    return default(Int32);
}

Dieses Vorgehen birgt natürlich einige Gefahren. Nehmen wir mal an, dass „value“ vom Type String ist. Mit dem Umweg über object kann man auch diesen Wert dann in Int32 konvertieren. Einen entsprechenden Fehler spuckt der Compiler aber nicht aus, sondern man erhält erst bei der Ausführung eine Exception

Die angegebene Umwandlung ist ungültig.

Es ist also auf jeden Fall sehr wichtig, dass man immer erst überprüft, ob der entsprechende Type auch wirklich zutrifft.