Type
(propertyType
)がヌル可能かどうかを確認するために、私は以下を使用しています:
bool isNullable = "Nullable`1".Equals(propertyType.Name)
マジックストリングの使用を避ける方法はありますか?
絶対- 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...
次のコードを使用して、TypeオブジェクトがNullable型を表すかどうかを判断します。 TypeオブジェクトがGetTypeの呼び出しから返された場合、このコードは常にfalseを返すことに注意してください。
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
以下のMSDNリンクで説明されています:
http://msdn.Microsoft.com/en-us/library/ms366789.aspx
さらに、このSO QAでも同様の議論があります。