Correct way to check if a type is Nullable

Felice Pollano picture Felice Pollano · Jan 20, 2012 · Viewed 80.3k times · Source

In order to check if a Type ( propertyType ) is nullable, I'm using:

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

Is there some way that avoid using magic strings ?

Answer

Jon Skeet picture Jon Skeet · Jan 20, 2012

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...