【问题标题】:Why do C# HashSets have a Distinct() method为什么 C# HashSet 有 Distinct() 方法
【发布时间】:2012-06-07 14:28:54
【问题描述】:

为什么 HashSet 不能包含重复项时有可用的 Distinct() 方法?

【问题讨论】:

    标签: c# hashset


    【解决方案1】:

    Distinct方法不在HashSet<>上,而是在HashSet<>实现的IEnumerable<>上。

    扩展方法不能从某些类型中“省略”。一旦添加到一个类型,所有该类型和任何派生都将获得扩展方法。

    只是为了演示一下,如果您扩展 object,如果您添加了相关的命名空间,您会乱扔所有东西。所以不要去添加:

    namespace System
    {
        public static class ObjectExtensions
        {
            public static void Garbage(this object foo)
            {
            }
        }
    }
    

    【讨论】:

    • 澄清DistinctIEnumerable<T>上的扩展方法,HashSet<T>恰好实现了。
    • @jonnyGold 是的,我意识到,我只是在您发表评论之前编辑了我的答案。无论如何,感谢您的澄清。
    • 更准确地说,Distinct 是一个扩展方法,扩展了IEnumerable<> 并驻留在静态类System.Linq.Enumerable 中。
    • 对我来说有点像设计的味道
    • @atlantis 我不会说这是一种设计气味。想象一下它只是一个普通的interface,会产生同样的问题。但是如果 HashSet 定义了自己的Distinct 方法,扩展方法就会被隐藏起来,给优化提供了可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2018-02-18
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多