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

Typen, die NULL-Werte zulassen
Boxing von Typen, die NULL-Werte zulassen