Sandeep Datta Sandeep Datta - 11 months ago 70
C# Question

How to check if an object is nullable?

How do I check if a given object is nullable in other words how to implement the following method...

bool IsNullableValueType(object o)

EDIT: I am looking for nullable value types. I didn't have ref types in mind.

//Note: This is just a sample. The code has been simplified
//to fit in a post.

public class BoolContainer
bool? myBool = true;

var bc = new BoolContainer();

const BindingFlags bindingFlags = BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance

object obj;
object o = (object)bc;

foreach (var fieldInfo in o.GetType().GetFields(bindingFlags))
obj = (object)fieldInfo.GetValue(o);

obj now refers to an object of type
) with value equal to
. What I really wanted was an object of type

So now as a work around I decided to check if o is nullable and create a nullable wrapper around obj.

Answer Source

There are two types of nullable - Nullable<T> and reference-type.

Jon has corrected me that it is hard to get type if boxed, but you can with generics: - so how about below. This is actually testing type T, but using the obj parameter purely for generic type inference (to make it easy to call) - it would work almost identically without the obj param, though.

static bool IsNullable<T>(T obj)
    if (obj == null) return true; // obvious
    Type type = typeof(T);
    if (!type.IsValueType) return true; // ref-type
    if (Nullable.GetUnderlyingType(type) != null) return true; // Nullable<T>
    return false; // value-type

But this won't work so well if you have already boxed the value to an object variable.