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可能非常好,但它不是无所不能的,所以请利用您的知识为您带来优势. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |