web-dev-qa-db-ja.com

型がNullableかどうかを確認する正しい方法

TypepropertyType)がヌル可能かどうかを確認するために、私は以下を使用しています:

bool isNullable =  "Nullable`1".Equals(propertyType.Name)

マジックストリングの使用を避ける方法はありますか?

155
Felice Pollano

絶対- Nullable.GetUnderlyingType を使用:

if (Nullable.GetUnderlyingType(propertyType) != null)
{
    // It's nullable
}

これは、汎用構造体System.Nullableではなく、非汎用静的クラス Nullable<T> を使用することに注意してください。

また、specific(閉じた)null許容値タイプを表すかどうかをチェックすることに注意してください...genericタイプ、例えば.

public class Foo<T> where T : struct
{
    public Nullable<T> Bar { get; set; }
}

Type propertyType = typeof(Foo<>).GetProperty("Bar").PropertyType;
// propertyType is an *open* type...
316
Jon Skeet

次のコードを使用して、TypeオブジェクトがNullable型を表すかどうかを判断します。 TypeオブジェクトがGetTypeの呼び出しから返された場合、このコードは常にfalseを返すことに注意してください。

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

以下のMSDNリンクで説明されています:

http://msdn.Microsoft.com/en-us/library/ms366789.aspx

さらに、このSO QAでも同様の議論があります。

オブジェクトがNULL可能かどうかを確認する方法?

37
VS1