How can I return NULL from a generic method in C#?
I have a generic method with this (dummy) code (yes I'm aware IList has predicates, but my code is not using IList but some other collection, anyway this is irrelevant for the question...)
static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
foreach T thing in collecion
{
if (thing.Id == id)
return thing;
}
return null; // ERROR: Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead.
}
This gives me a build error
"Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead."
Can I avoid this error?
Two options:
- Return
default(T)
which means you'll returnnull
if T is a reference type (or a nullable value type),0
forint
,'\0'
forchar
, etc. (Default values table (C# Reference)) - Restrict T to be a reference type with the
where T : class
constraint and then returnnull
as normal
return default(T);