2012-06-07 6 views

ответ

13

Метод Distinct отсутствует на HashSet<>, но IEnumerable<>, который реализуется HashSet<>.

Методы расширения не могут быть «опущены» из определенных типов. После добавления к типу, весь этот тип и любой производный получит метод расширения.

Просто, чтобы продемонстрировать, если вы расширили object, вы поместили бы все, если бы добавили соответствующее пространство имен. Так что не добавляет:

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

Для уточнения 'Distinct' является метод расширения на' 'IEnumerable , что' 'HashSet происходит реализовать. – bluevector

+0

@jonnyGold Да, я понял, я только что редактировал свой ответ до вашего комментария. Спасибо за разъяснение в любом случае. –

+1

Чтобы быть более точным, 'Distinct' - это метод расширения, расширяющий' IEnumerable <> 'и находящийся в статическом классе' System.Linq.Enumerable'. –