gpt4 book ai didi

c# - Enumerable.Except 的两个重载之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:52 25 4
gpt4 key购买 nike

我试图理解 Enumerable.Except 方法的两个重载之间的区别,即

  • 除了(IEnumerable,IEnumerable)
  • 除了(IEnumerable,IEnumerable,IEqualityComparer)

显然,第一个区别是第一个重载使用默认的相等比较器,而另一个使用 IEqualityComparer。 , 但我可以用第一种方法实现相同的结果,方法是实现 IEquatable接口(interface)(如 Except 方法的 MSDN 文档中所述),那么为什么需要第二次重载?

最佳答案

两个原因:

  1. 你只能实现IEquatable<T>对于您自己的类型...而您可以指定 IEqualityComparer<T>对于任何类型,是否可以自己修改。

  2. 可能有多种比较类型是否相等的方法,但是实现 IEquatable<T>只允许你表达其中的一种。

所有这一切的一个简单示例是字符串 - 考虑:

string[] x = { "A", "B", "C" };
string[] y = { "A", "c" };

var bc = x.Except(y);
var justB = x.Except(y, StringComparer.OrdinalIgnoreCase);

我们可能在不同的情况下需要两种结果,这意味着我们无法使用 IEquatable<T> 处理这两种结果。 ...我们无法改变string的方式工具 IEquatable<T>反正。 (当然,您不限于 StringComparer - 例如,您可以编写一个只使用字符串长度的相等比较器。)

这也不是 LINQ 特有的 - 对于处理相等性的任何 API 通常都是这种情况,例如HashSet<> , Dictionary<,>

关于c# - Enumerable.Except 的两个重载之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com