为什么C#hashset有一个Distinct()方法

为什么C#hashset有一个Distinct()方法,c#,hashset,C#,Hashset,当哈希集不能包含重复项时,为什么会有Distinct()方法可用?Distinct方法不在HashSet上,而是由HashSet实现的IEnumerable上 某些类型中不能“省略”扩展方法。一旦添加到类型中,所有该类型和任何派生类型都将获得扩展方法 只是为了演示一下,如果您扩展了对象,那么如果您添加了相关的名称空间,您将丢弃所有内容。因此,不要添加: namespace System { public static class ObjectExtensions {

当哈希集不能包含重复项时,为什么会有Distinct()方法可用?

Distinct方法不在
HashSet
上,而是由
HashSet
实现的
IEnumerable

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

只是为了演示一下,如果您扩展了
对象
,那么如果您添加了相关的名称空间,您将丢弃所有内容。因此,不要添加:

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

澄清
Distinct
IEnumerable
上的一个扩展方法,
HashSet
恰好实现了该方法。@jonnyGold是的,我意识到,我只是在你发表评论之前编辑了我的答案。无论如何感谢您的澄清。更准确地说,
Distinct
是一种扩展方法,它扩展了
IEnumerable
,并驻留在静态类
系统中。Linq.Enumerable
。感觉有点像设计的味道me@atlantis我不会说这是一种设计的味道。假设它只是一个普通的
接口
,也会产生同样的问题。但是如果HashSet定义了自己的
Distinct
方法,那么扩展方法将被隐藏,从而提供了优化的可能性