c# – 在HashSet上调用Distinct <>()

前端之家收集整理的这篇文章主要介绍了c# – 在HashSet上调用Distinct <>()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是很好奇..当我在HashSet上调用Distinct<>()(来自 Linq)时,.NET是否知道,这个IEnumerable总是包含不同的值集,并优化了这个调用

解决方法

通过反射器查看代码判断,我不得不说.

代码最终构造一个迭代器方法生成的类的实例,无论你给它什么类型.

您可以为Hashset和Distinct方法指定比较器对象,这也会使问题更加复杂,这意味着优化仅在极少数情况下使用.

例如,在以下情况下,它实际上可以优化呼叫,但它无法知道:

var set = new HashSet<int>(new MyOwnInt32Comparer());
var distinct = set.Distinct(new MyOwnInt32Comparer());

因为我给它比较类的两个实例,并且这样的类通常不实现相等方法,所以Distinct方法无法知道两个比较器实现实际上是相同的.

在任何情况下,这是程序员比运行时更了解代码的情况,因此利用它. Linq可能非常好,但它不是无所不能的,所以请利用您的知识为您带来优势.

猜你在找的C#相关文章