Dlaczego HashSet, ale nie jest ustawiony w C #?

Stare pytanie

Moje rozumienie jest takie, że C # ma w pewnym sensieHashSet&nbsp;iset&nbsp;typy. Rozumiem coHashSet&nbsp;jest. Ale dlaczegoset&nbsp;to osobne słowo? Dlaczego nie każdy zestaw jestHashSet<Object>?

Nowe pytanie

Dlaczego C # nie ma ogólnegoSet&nbsp;typ, podobny doDictionary&nbsp;rodzaj? Z mojego punktu widzenia chciałbym mieć zestaw ze standardową wydajnością wyszukiwania / dodawania / usuwania. Nie przejmowałbym się zbytnio, czy jest to realizowane za pomocą haszy czy czegoś innego. Dlaczego więc nie utworzyć klasy, która w rzeczywistości zostałaby zaimplementowana jakoHashSet&nbsp;w tej wersji C #, ale może nieco innej w przyszłej wersji?

Albo dlaczego nie przynajmniej interfejsISet?

Odpowiedź

Nauczyłem się dzięki wszystkim, którzy odpowiedzieli poniżej:ICollection&nbsp;implementuje wiele z tego, czego można się spodziewaćISet. Z mojego punktu widzeniaICollection&nbsp;narzędziaIEnumerable&nbsp;podczas gdy zestawy nie muszą być wyliczalne --- przykład: zbiór liczb rzeczywistych od 1 do 2 (nawet więcej, zestawy mogą być generowane dynamicznie). Zgadzam się, że jest to drobny argument, ponieważ „normalni programiści” rzadko potrzebują niezliczonych zestawów.

Ok, myślę, że to rozumiem.HashSet&nbsp;absolutnie miał być nazywanySet&nbsp;ale słowoSet&nbsp;jest w pewnym sensie zarezerwowany. Dokładniej, twórcy architektury .NET chcieli mieć spójny zestaw (sic!) Klas dla różnych języków. Oznacza to, że każda nazwa klasy standardowej nie może pokrywać się z żadnym słowem kluczowym w językach .NET. SłowoSetjest jednak używany w VB.NET, który jest niewrażliwy na wielkość liter (czy to?), niestety nie ma tam miejsca na manewry.

Zagadka rozwiązana :)

Epilog

Nowa odpowiedź Alexa Y. łączy się zStrona MSDN&nbsp;który opisuje nadchodzący interfejs .NET 4.0ISet&nbsp;który zachowuje się tak, jak myślałem, że powinien i jest realizowany przezHashedSet. Szczęśliwe zakończenie.