我在LINQ中经历了GroupBy方法:
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IEqualityComparer<TKey> comparer
)
我了解如何使用GroupBy及其返回的内容。我想了解IEqualityComparer<TKey> comparer
的重要性以及它在GroupBy中实际使用的内容。
答案 0 :(得分:11)
IEqualityComparer<TKey>
对象将用于执行两步检查以查看TKey
实例是否与现有组的密钥“相等”,因此应该在该组中:< / p>
GetHashCode
)。如果它不等于任何这些值,则将其添加到新组Equals
)。如果该项目“等于”组密钥,则该项目将添加到该组中。如果不提供比较器(通过传递null
或使用其中一个没有该参数的重载),则使用“deafult”比较器,它使用如果TKey
类实现IEquatable
或Equals
和GetHashCode
的任何适用覆盖,则Equals
类本身。
因此,这意味着GetHashCode
和$this->DB_Connect();
之间存在一些关键关系:
答案 1 :(得分:-1)
您提供了一个荒谬的平等比较器,因此您的结果将是荒谬的。您的哈希代码基于对比较器本身的引用,这与Equals
方法中的任何内容无关,而在* 20 EXISTS
方法中,您说的是两个对象相等,如果第一个对象与第二个字符串一样长或长。这没有任何意义,它甚至违反了相等的基本属性,因为参数的顺序应该是无关紧要的。