Ja, ich weiß, das wurde schon oft diskutiert, und ich lese alle Beiträge und Kommentare zu dieser Frage, aber kann immer noch nicht etwas zu verstehen scheinen. Eine der Optionen, die MSDN bietet, um diese Verletzung zu beheben, ist die Rückgabe einer Sammlung (oder einer Schnittstelle, die von einer Sammlung implementiert wird) beim Zugriff auf die Eigenschaft. Das Problem wird jedoch offensichtlich nicht gelöst, da die meisten Sammlungen dies nicht tun unveränderlich und kann auch geändert werden. Eine andere Möglichkeit, die ich in den Antworten und Kommentaren zu dieser Frage gesehen habe, ist, das Array mit einer ReadOnlyCollection zu kapseln und es oder eine Basisschnittstelle davon zurückzugeben (wie IReadOnlyCollection), aber ich verstehe nicht, wie dies das löst Leistungsproblem.Eigenschaften sollten Arrays nicht zurückgeben
Wenn zu einem beliebigen Zeitpunkt die Eigenschaft referenziert wird, muss Speicher für eine neue ReadOnlyCollection reserviert werden, die das Array einkapselt. Worin besteht der Unterschied (in Form von Leistungsproblemen das Array/die Sammlung nicht zu bearbeiten) als einfach a zurückzugeben Kopie des ursprünglichen Arrays?
Darüber hinaus verfügt ReadOnlyCollection nur über einen Konstruktor mit IList-Argument, daher muss das Array vor dem Erstellen mit einer Liste umschlossen werden.
Wenn ich absichtlich mit einem Array innerhalb meiner Klasse (nicht als unveränderliche Sammlung) arbeiten möchte, ist die Leistung besser, wenn ich neuen Speicher für eine ReadOnlyCollection zuweisen und mein Array damit kapseln statt eine Kopie des Arrays zurückgeben?
Bitte klären Sie dies ...
Wer sagt, dass es etwas mit Leistung zu tun hat? – Jamiec
Ein muss Artikel von Eric auf Arrays lesen - http://blogs.msdn.com/b/ericlippert/archive/2008/09/22/arrays-consided-somewhat-harmful.aspx – Yogi