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 Antwort 🙂 Ich 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. Doch HashSet<T> implementiert ICollection<T> , also kannst du dafür ebenfalls ReadOnlyCollection<T> benutzen, wobei jedoch jegliche zusätzliche Funktionalität "verloren" geht wegen dem beschränkten Interface. Wenn du die Funktionalität von HashSet<T> nun als read-only verwendbar machen willst, dann kannst du ja eine Klasse von ReadOnlyCollection<T> vererben und die gewünschten Method-stubs dort definieren und darüber die echten Methoden an dem gewrappten HashSet<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 von ReadOnlyCollection<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 kein HashSet<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üsselwort const in C++ so sehr liebe...


Anmelden zum Antworten