Freigeben über


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)