Dlaczego HashSet, ale nie jest ustawiony w C #?

Stare pytanie

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

Nowe pytanie

Dlaczego C # nie ma ogólnegoSet typ, podobny doDictionary 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 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 implementuje wiele z tego, czego można się spodziewaćISet. Z mojego punktu widzeniaICollection narzędziaIEnumerable 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 absolutnie miał być nazywanySet ale słowoSet 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 który opisuje nadchodzący interfejs .NET 4.0ISet który zachowuje się tak, jak myślałem, że powinien i jest realizowany przezHashedSet. Szczęśliwe zakończenie.

questionAnswers(7)

yourAnswerToTheQuestion