UnmodifiableList in c#?
-
Hallo zusammen
Ich möchte eine List zurückgeben, ohne diese kopieren zu müssen und ohne dass vom aufrufer Änderungen an dieser Liste vorgenommen werden können. Also in Java habe ich hierfür Collections.unmodifiableList und in C# habe ich auch bereits ArrayList.ReadOnly gefunden. Ich verwende jedoch die generische Version List<Typ>. Gibt es hierfür ebenfalls eine Möglichkeit?Mfg Samuel
-
System.Collections.ObjectModel.ReadOnlyCollection<T>
MfG
-
/rant/
Hey, danke vielmals für deine fixe AntwortIch habe gerade bemerkt, dass ich mit einer HashSet besser drann bin. Gibt es hier ebenfalls ein Pendant?
-
Nun, eine direkte Entsprechung für die Funktionalität von
HashSet<T>
als read-only Variante gibt es nicht. DochHashSet<T>
implementiertICollection<T>
, also kannst du dafür ebenfallsReadOnlyCollection<T>
benutzen, wobei jedoch jegliche zusätzliche Funktionalität "verloren" geht wegen dem beschränkten Interface. Wenn du die Funktionalität vonHashSet<T>
nun als read-only verwendbar machen willst, dann kannst du ja eine Klasse vonReadOnlyCollection<T>
vererben und die gewünschten Method-stubs dort definieren und darüber die echten Methoden an dem gewrapptenHashSet<T>
aufrufen.MfG
-
ReadOnlyCollection nimmt aber zu meinem grossen Erstaunen auschliesslich ein IList Inteface als Parameter?
-
Ishildur schrieb:
ReadOnlyCollection nimmt aber zu meinem grossen Erstaunen auschliesslich ein IList Inteface als Parameter?
Oh, hast natürlich recht! Ich hatte es anders in Erinnerung, mit
ICollection<T>
als Argument im Konstruktor vonReadOnlyCollection<T>
(der Name legt dies auch nahe, nicht?), aber jetzt wo du es sagt hab ich mal nachgeschaut. Mit
IList<T>
kannst du natürlich keinHashSet<T>
ansprechen.Mir scheint es nun, als ob du keine andere Wahl hättest, als selbst einen Wrapper zu schreiben.
HashSet<T>
vererben und Funktionalität verstecken kannst du nicht. Jetzt weiss ich wieder, warum ich das Schlüsselwortconst
in C++ so sehr liebe...