Correct way to check if a type is Nullable [duplicate]
Absolutely - use Nullable.GetUnderlyingType
:
if (Nullable.GetUnderlyingType(propertyType) != null)
{
// It's nullable
}
Note that this uses the non-generic static class System.Nullable
rather than the generic struct Nullable<T>
.
Also note that that will check whether it represents a specific (closed) nullable value type... it won't work if you use it on a generic type, e.g.
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...
Use the following code to determine whether a Type object represents a Nullable type. Remember that this code always returns false if the Type object was returned from a call to GetType.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
explained at the below MSDN link:
http://msdn.microsoft.com/en-us/library/ms366789.aspx
Moreover, there is a similar discussion at this SO QA:
How to check if an object is nullable?