If logic of generic class or method requires checking equality of values having generic type, use EqualityComparer<TType>.Default
property:
public void Foo<TBar>(TBar arg1, TBar arg2)
{
var comparer = EqualityComparer<TBar>.Default;
if (comparer.Equals(arg1,arg2)
{
...
}
}
This approach is better than simply calling Object.Equals()
method, because default comparer implementation checks, whether TBar
type implements IEquatale<TBar>
interface and if yes, calls IEquatable<TBar>.Equals(TBar other)
method. This allows to avoid boxing/unboxing of value types.