2008-10-13 7 views
15

Ich stieß auf diese Klasse beim Lesen eines C# -Buches und habe einige Fragen.Über System.Linq.Lookup Klasse

  • Warum wird dies in den System.Linq-Namespace und nicht in den normalen Collections-Namespace hinzugefügt?
  • Was die Intention hinter dieser Klasse ist
  • Warum ist diese Klasse nicht für direkte Instanziierung gedacht? Dies ist nur über die Erweiterung ToLookup möglich, richtig?

Antwort

17

Zweck der Klasse: ein Wörterbuch, in dem ein Schlüssel mehreren Werten zugeordnet werden kann. Stellen Sie sich vor, dass es eher Gruppierung als Eins-zu-eins-Mapping ist.

Nur durch ToLookup Entscheidung: Pass. Auch das scheint mir ein schlechter Ruf zu sein. Auf der anderen Seite bedeutet es, dass das Ergebnis für die Außenwelt unveränderlich ist, was ziemlich nett ist. Es ist ganz einfach, eine eigene Sammlung zu schreiben, die das natürlich unterstützt - aber es wäre schön gewesen, sie in den Sammlungen "richtig" zu haben. Meine Vermutung ist, dass MS nicht die Zeit/das Geld hatte, um den ziemlich rigorosen Entwurf/Test zu durchlaufen, der erforderlich ist, um es zu einer erstklassigen Sammlungsentscheidung zu machen.

Namensraumentscheidung: Wahrscheinlich im Zusammenhang mit dem Obigen. Eine Version in System.Collections.Generic zu haben, die Sie selbst nicht erstellen konnten, wäre etwas merkwürdig gewesen.

6

Als Nebenbemerkung, dass MiscUtil enthält auch eine MiscUtil.Linq.EditableLookup<,> Klasse, die ähnlich ist; Es implementiert die normale ILookup<,> Schnittstelle, ist aber vollständig veränderbar - so können Sie es erstellen und Ihre eigenen Werte hinzufügen.

Verwandte Themen