加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:08:34 所属栏目:百科 来源:网络整理
导读:我只是很好奇..当我在HashSet上调用Distinct()(来自 Linq)时,.NET是否知道,这个IEnumerable总是包含不同的值集,并优化了这个调用? 解决方法 通过反射器查看代码判断,我不得不说. 代码最终构造一个迭代器方法生成的类的实例,无论你给它什么类型. 您可以为Has
我只是很好奇..当我在HashSet上调用Distinct<>()(来自 Linq)时,.NET是否知道,这个IEnumerable总是包含不同的值集,并优化了这个调用?

解决方法

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

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读