方法: 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<>)) {…}