Most efficient way to check if an object is a value type

You aren’t really testing an object – you want to test the type. To call those, the caller must know the type, but… meh. Given a signature <T>(T obj) the only sane answer is:

public bool IsValueType<T>() {
    return typeof(T).IsValueType;
}

or if we want to use an example object for type inference purposes:

public bool IsValueType<T>(T obj) {
    return typeof(T).IsValueType;
}

this doesn’t need boxing (GetType() is boxing), and doesn’t have problems with Nullable<T>. A more interesting case is when you are passing object

 public bool IsValueType(object obj);

here, we already have massive problems with null, since that could be an empty Nullable<T> (a struct) or a class. But A reasonable attempt would be:

public bool IsValueType(object obj) {
    return obj != null && obj.GetType().IsValueType;
}

but note that it is incorrect (and unfixable) for empty Nullable<T>s. Here it becomes pointless to worry about boxing as we are already boxed.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)