解决方法
通过反射器查看代码判断,我不得不说.
代码最终构造一个迭代器方法生成的类的实例,无论你给它什么类型.
您可以为Hashset和Distinct方法指定比较器对象,这也会使问题更加复杂,这意味着优化仅在极少数情况下使用.
例如,在以下情况下,它实际上可以优化呼叫,但它无法知道:
var set = new HashSet<int>(new MyOwnInt32Comparer()); var distinct = set.Distinct(new MyOwnInt32Comparer());
因为我给它比较类的两个实例,并且这样的类通常不实现相等方法,所以Distinct方法无法知道两个比较器实现实际上是相同的.
在任何情况下,这是程序员比运行时更了解代码的情况,因此利用它. Linq可能非常好,但它不是无所不能的,所以请利用您的知识为您带来优势.