Checking instance of non-class constrained type parameter for null in generic method
- by casperOne
I currently have a generic method where I want to do some validation on the parameters before working on them. Specifically, if the instance of the type parameter T is a reference type, I want to check to see if it's null and throw an ArgumentNullException if it's null.
Something along the lines of:
// This can be a method on a generic class, it does not matter.
public void DoSomething<T>(T instance)
{
if (instance == null) throw new ArgumentNullException("instance");
Note, I do not wish to constrain my type parameter using the class constraint.
I thought I could use Marc Gravell's answer on "How do I compare a generic type to its default value?", and use the EqualityComparer<T> class like so:
static void DoSomething<T>(T instance)
{
if (EqualityComparer<T>.Default.Equals(instance, null))
throw new ArgumentNullException("instance");
But it gives a very ambiguous error on the call to Equals:
Member 'object.Equals(object, object)' cannot be accessed with an instance reference; qualify it with a type name instead
How can I check an instance of T against null when T is not constrained on being a value or reference type?