次の方法で共有


方法: Null 許容型を識別する (C# プログラミング ガイド)

C# の typeof 演算子を使用して、Null 許容型を表す Type オブジェクトを作成できます。

System.Type type = typeof(int?);

System.Reflection 名前空間のクラスおよびメソッドを使用して、Null 許容型を表す Type オブジェクトを作成することもできます。 ただし、実行時に GetType メソッドまたは is 演算子を使用して Null 許容型の変数から型情報を取得しようとすると、Null 許容型ではなく基になる型を表す Type オブジェクトが作成されます。

Null 許容型に対して GetType を呼び出すと、型が暗黙的に Object に変換されるときに、ボックス化操作が実行されます。 このため、GetType は常に、Null 許容型ではなく基になる型を表す Type オブジェクトを返します。

  int? i = 5;
  Type t = i.GetType();
  Console.WriteLine(t.FullName); //"System.Int32"

C# の is 演算子も Null 許容型に作用します。 このため、変数が Null 許容型であるかどうかを確認する目的で is を使用することはできません。 次の例の is 演算子は、Nullable<int> 変数を整数値として処理します。

  static void Main(string[] args)
  {
    int? i = 5;
    if (i is int) // true
      //…
  }

使用例

次のコードを使用して、Type オブジェクトが Null 許容型を表しているかどうかを確認します。 このトピックで前述したように、Type オブジェクトが GetType の呼び出しから返された場合、このコードは常に false を返します。

if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}

参照

関連項目

null 許容型 (C# プログラミング ガイド)

Null 許容型のボックス化 (C# プログラミング ガイド)