2014-09-23 3 views
6

Gemäß http://msdn.microsoft.com/en-US/library/0fss9skc(v=vs.120).aspx sollten Eigenschaften keine Arrays zurückgeben. Wie wirkt das mit Generika zusammen? Wenn ein Array ein zulässiger Typ für ein generisches ist, sollte ich Funktionen wie T GetValue() und SetValue(T value) anstatt T Value { get; set; } machen?Sind generische Eigenschaften, die Arrays zurückgeben, akzeptabel?

+3

Methoden erstellen zu erhalten/stellen Sie den Wert nicht wirklich etwas zu tun, um die Auswirkungen in der Begründung für die Regel beschrieben zu mildern. – Servy

+0

Nie wirklich darüber nachgedacht. Ich habe immer ein Array zurückgegeben, wenn ich nicht wollte, dass meine interne Sammlung hinzugefügt oder entfernt wird. Vielleicht sollte ich ReadOnlyCollection verwenden. – TyCobb

+0

@Servy: Obwohl es wahr genug ist, denken die meisten Programmierer ein bisschen, bevor sie ein Konstrukt wie GetValueT() [x] in einer Schleife verwenden. – RobinHood70

Antwort

10

Diese Regel ist nicht absolut. Verstehen Sie, woher es kommt: Eine Eigenschaft, die ein Array zurückgibt, muss eine Kopie davon erstellen, damit der Aufrufer seine Kopie mutieren und nicht in den internen Zustand des Objekts gelangen kann.

Wenn Sie mit generischem Code zu tun, dass generischer Code weiß nichts über die konkreten T. Es hängt nicht von seiner internen Struktur ab. Daher hilft die Einhaltung dieser Regel nicht. Das Übergeben von Arrays innerhalb und außerhalb von generischem Code ist absolut akzeptabel.

Praxisbeispiel: Ein List<int[]>.

Zusätzlich zu, dass stellt Servy richtig, dass Methoden der Erstellung der Wert erhalten/nicht gesetzt ist wirklich etwas zu tun, um die Auswirkungen in der Begründung für die Regel beschrieben zu mildern.

Verwandte Themen