Gewusst wie: Identifizieren eines Typs, der NULL-Werte zulässt (C#-Programmierhandbuch)
Sie können den Operator typeof von C# verwenden, um ein Type-Objekt zu erstellen, das einen Typ darstellt, der NULL-Werte zulässt:
System.Type type = typeof(int?);
Darüber hinaus können Sie die Klassen und Methoden des System.Reflection-Namespaces verwenden, um Type-Objekte zu generieren, die Typen darstellen, die NULL-Werte zulassen. Wenn Sie jedoch versuchen, zur Laufzeit mit der GetType-Methode oder dem Operator is Typinformation von Variablen abzurufen, die NULL-Werte zulassen, wird ein Type-Objekt generiert, das den zugrunde liegenden Typ darstellt und nicht den Typ, der NULL-Werte zulässt.
Das Aufrufen von GetType für einen Typ, der NULL-Werte zulässt, resultiert in einem Boxingvorgang, wenn der Typ implizit in Object konvertiert wird. Daher gibt GetType immer ein Type-Objekt zurück, das den zugrunde liegenden Typ darstellt, nicht den Typ, der NULL-Werte zulässt.
int? i = 5;
Type t = i.GetType();
Console.WriteLine(t.FullName); //"System.Int32"
Der Operator is von C# kann für den zugrunde liegenden Typ eines Typs, der NULL-Werte zulässt, verwendet werden. Daher kann mit is nicht bestimmt werden, ob eine Variable ein Typ ist, der NULL-Werte zulässt. Das folgende Beispiel zeigt, dass der Operator is eine <int>-Variable, die NULL-Werte zulässt, als int behandelt.
static void Main(string[] args)
{
int? i = 5;
if (i is int) // true
//…
}
Beispiel
Verwenden Sie den folgenden Code, um zu bestimmen, ob ein Type-Objekt einen Typ darstellt, der NULL-Werte zulässt. Beachten Sie, dass dieser Code immer false zurückgibt, wenn das Type-Objekt durch einen Aufruf von GetType zurückgegeben wurde, wie oben beschrieben.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
Siehe auch
Referenz
Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)
Boxing von Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)