Warum "Eigenschaften, die Arrays zurückgeben, sind anfällig für Code-Ineffizienzen"?

9

Ich habe einen Code, der sich mit Kunden beschäftigt, die in der Datenbank gespeichert sind. Es gibt ein Objekt Customer , und es hat unter anderem zwei Eigenschaften vom Typ byte[] : eine Eigenschaft für das Passwort salt, die zweite für den Passwort-Hash.

Wenn ich den Code mit FxCop überprüfe, sehe ich, dass er sich beschwert ( CA1819 , Leistungsregeln ), dass:

  

"Eigenschaften, die Arrays zurückgeben, sind anfällig für Code-Ineffizienzen. Erwägen Sie die Verwendung einer Sammlung oder machen Sie dies zu einer Methode. Weitere Informationen finden Sie in den Design-Richtlinien."

und schlägt vor:

  

"Ändern Sie 'Customer.PasswordHash', um eine Sammlung zurückzugeben oder eine Methode zu erstellen."

Ich verstehe nicht wirklich, was ist die Code-Ineffizienz in dem, was ich tue?

    
Arseni Mourzenko 24.07.2010, 06:18
quelle

1 Antwort

4

Das Problem ist, dass Arrays immer veränderbar sind. Das bedeutet, dass Sie keines von einer Methode ohne eines von beiden zurückgeben können:

  • Ermöglichen Sie dem Anrufer, Ihren internen Zustand zu stören
  • Erstellen Sie zuerst eine Kopie

Wenn Sie eine Sammlung verwenden, können Sie stattdessen einen schreibgeschützten Wrapper für die echte Sammlung erstellen und diesen zurückgeben - und das kann erheblich billiger sein. Alternativ, wenn Sie es zu einer Methode ändern, die die Erwartung verringert, dass es sehr schnell aufgerufen wird.

Wenn Sie mit der Änderung Ihrer Daten durch Anrufer zufrieden sind, funktioniert ein Array natürlich einwandfrei ...

    
Jon Skeet 24.07.2010, 06:20
quelle

Tags und Links