【发布时间】:2015-02-09 21:21:54
【问题描述】:
我试图了解Enumerable.Except 方法的两个重载之间的区别,即
- 除了(IEnumerable,IEnumerable)
- 除了(IEnumerable、IEnumerable、 IEqualityComparer)
显然,第一个区别是第一个重载使用默认相等比较器,而另一个使用IEqualityComparer,但我可以通过实现IEquatable 接口使用第一种方法获得相同的结果(如在Except 方法的 MSDN 文档),那么为什么需要第二次重载?
【问题讨论】:
-
好吧,仅适用于由于某种原因无法实现
IEquatable接口的情况(例如 - 如果它不是您的类),但仍想使用自定义比较器。 -
可能你想在2
IEnuemrable<SomeThirdPartyClass>上使用但不能修改SomeThirdPartyClass,那么你必须使用第二个重载。 -
有时有几个适用于对象的相等规则,具体取决于上下文。 IEquatable 确实提供了一种用例,因此在这些情况下,您需要定义替代比较器,以及
Except的第二个重载。
标签: c# linq except iequalitycomparer