如果泛型类或方法的逻辑需要检查具有泛型类型的值的相等性,请使用EqualityComparer<TType>.Default 属性:
public void Foo<TBar>(TBar arg1, TBar arg2) { var comparer = EqualityComparer<TBar>.Default; if (comparer.Equals(arg1,arg2) { ... } }
这种方法比简单地调用方法要好,因为默认比较器实现会检查类型是否实现了接口,如果是,则调用方法。这允许避免对值类型进行装箱/拆箱。Object.Equals()TBarIEquatale<TBar> IEquatable<TBar>.Equals(TBar other)