Was ist der Grund für CA1023?

8
  

CA1023: Indexer sollten nicht mehrdimensional sein

     

Indexer, dh indexierte Eigenschaften, sollten einen einzelnen Index verwenden.   Multi-dimensionale Indexer können die Benutzerfreundlichkeit erheblich reduzieren   die Bibliothek. Wenn das Design mehrere Indizes erfordert, überprüfen Sie es erneut   ob der Typ einen logischen Datenspeicher darstellt. Wenn nicht, benutze a   Methode.

     

Um einen Verstoß gegen diese Regel zu beheben, ändern Sie den Entwurf so, dass er einen einzelnen Ganzzahl- oder Zeichenfolgenindex verwendet, oder verwenden Sie eine Methode anstelle des Indexers.

Das kommt mir sehr seltsam vor, warum beeinflusst das irgendetwas? anders als einen mehrdimensionalen Index viel weniger intuitiv zu machen?

Change the design to use a string ? Und was damit machen? Parsen Sie die Zahlen am anderen Ende und verlieren Sie starke Typisierung?

Kann mir jemand Gründe nennen, warum mit mehrdimensionalen Indexern etwas nicht stimmt?

    
James Barrass 06.01.2014, 11:54
quelle

1 Antwort

5
  

Wenn das Design mehrere Indizes erfordert, überdenken Sie, ob der Typ   repräsentiert einen logischen Datenspeicher. Wenn nicht, verwenden Sie eine Methode.

Das Problem ist, dass Indexer nicht spezifisch benannt werden können (außer als @volpav-Kommentare, um mit Sprachen zu kommunizieren, die sie nicht nativ unterstützen - standardmäßig heißen sie Item ), während Methoden sein müssen. Dies bedeutet, dass ein Client Probleme haben kann, die Bedeutung eines Indexers zu erraten, wenn er nicht sofort offensichtlich ist ("stellt einen logischen Datenspeicher dar"). Dies kann besonders ärgerlich sein, wenn ein Indexer mehrere Parameter und / oder mehrere Überladungen des Indexers aufweist. Natürlich kann die Benennung von Indexerparametern hilfreich sein (obwohl der Indexer selbst in C # nicht spezifisch benannt werden kann), aber bedenken Sie, dass Methoden auf die Bedeutungen des Rückgabewerts und der Parameter im Namen des Methode selbst (betrachten Sie GetCustomersByCountryAndAge vs this [string, int]). Dies erleichtert die Lesbarkeit beim Durchsuchen des Quellcodes erheblich.

Eine gut geschriebene XML-Dokumentation für Ihren Indexer würde ebenfalls hilfreich sein.

  

Um einen Verstoß gegen diese Regel zu beheben, ändern Sie den Entwurf, um einen einzelnen zu verwenden   Ganzzahl- oder Zeichenfolgenindex

Dieser etwas schlecht formulierte Satz scheint Ratschlag zu sein, kombiniert mit der Beobachtung, dass int und string die häufigsten Parametertypen für Indexer sind. Es sollte wahrscheinlich nur lesen "Ändern Sie das Design, um einen einzelnen Index zu verwenden."

    
Ani 06.01.2014, 12:03
quelle

Tags und Links