Alte Frage
Nach meinem Verständnis hat C# in gewissem Sinne HashSet
y set
Typen. Ich verstehe, was HashSet
ist. Aber warum set
ein eigenes Wort ist? Warum ist nicht jeder Satz HashSet<Object>
?
Neue Frage
Warum hat C# keine generische Set
Typ, ähnlich wie Dictionary
Typ? Meiner Meinung nach würde ich gerne eine Menge mit einer Standardleistung für das Suchen, Hinzufügen und Löschen von Daten haben. Es wäre mir ziemlich egal, ob es mit Hashes oder etwas anderem realisiert wird. Warum also nicht eine Set-Klasse erstellen, die tatsächlich als HashSet
in dieser Version von C#, aber vielleicht etwas anders in einer zukünftigen Version?
Oder warum nicht zumindest die Schnittstelle ISet
?
Antwort
Vielen Dank an alle, die unten geantwortet haben: ICollection
implementiert vieles von dem, was man von ISet
. Aber aus meiner Sicht, ICollection
implementiert IEnumerable
während Mengen nicht aufzählbar sein müssen --- Beispiel: Menge der reellen Zahlen zwischen 1 und 2 (mehr noch, Mengen können dynamisch erzeugt werden). Ich stimme zu, dass dies ein kleiner Schimpfwort ist, da "normale Programmierer" selten unabzählbare Mengen benötigen.
Okay, ich glaube, ich habe es verstanden. HashSet
sollte unbedingt genannt werden Set
aber das Wort Set
ist in gewissem Sinne reserviert. Genauer gesagt wollten die Schöpfer der .NET-Architektur einen einheitlichen Satz (sic!) von Klassen für verschiedene Sprachen haben. Das bedeutet, dass jeder Name der Standardklasse nicht mit einem Schlüsselwort in den .NET-Sprachen übereinstimmen darf. Das Wort Set
wird jedoch in VB.NET verwendet, bei dem die Groß- und Kleinschreibung keine Rolle spielt (oder doch?), so dass hier leider kein Spielraum besteht.
Rätsel gelöst :)
Epilog
Die neue Antwort von Alex Y. verweist auf die MSDN-Seite die die kommende .NET 4.0-Schnittstelle beschreibt ISet
das sich ziemlich genau so verhält, wie ich es mir vorgestellt habe, und das von HashedSet
. Happy End.