To avoid boxing, the best way to compare generics for equality is with EqualityComparer<T>.Default
. This respects IEquatable<T>
(without boxing) as well as object.Equals
, and handles all the Nullable<T>
“lifted” nuances. Hence:
if(EqualityComparer<T>.Default.Equals(obj, default(T))) {
return obj;
}
This will match:
- null for classes
- null (empty) for
Nullable<T>
- zero/false/etc for other structs