CA1043: Ganzzahliges Argument oder Zeichenfolgenargument für Indexer verwenden

TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

Kategorie (Category)

Microsoft.Design

Unterbrechende Änderung

Breaking

Ursache

Ein öffentlicher oder geschützter Typ enthält einen öffentlichen oder geschützten Indexer mit einem anderen Indextyp als Int32, Int64, Object oder String.

Regelbeschreibung

Indexer, d. h. indizierte Eigenschaften, sollten ganzzahlige Typen oder Zeichenfolgentypen für den Index verwenden.Diese Typen werden i. d. R. zum Indizieren von Datenstrukturen verwendet und erhöhen die Brauchbarkeit der Bibliothek.Die Verwendung des Object-Typs sollte auf die Fälle beschränkt werden, in denen der spezielle Integer- oder Zeichenfolgentyp zur Entwurfszeit nicht angegeben werden kann.Wenn der Entwurf andere Typen für den Index erfordert, müssen Sie sich überlegen, ob der Typ einen logischen Datenspeicher darstellt.Wenn er keinen logischen Datenspeicher darstellt, verwenden Sie eine Methode.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu behandeln, ändern Sie den Index in einen Integer- oder Zeichenfolgentyp, oder verwenden Sie eine Methode statt des Indexers.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung dieser Regel erst, nachdem Sie den Bedarf für einen nicht dem Standard entsprechenden Indexer sorgfältig geprüft haben.

Beispiel

Im folgenden Beispiel wird ein Indexer, der einen Int32-Index verwendet, veranschaulicht.

Imports System

Namespace DesignLibrary

    Public Class Months

        Private month() As String = {"Jan", "Feb", "..."}

        Default ReadOnly Property Item(index As Integer) As String 
            Get 
                Return month(index)
            End Get 
        End Property 

    End Class 

End Namespace
using System;

namespace DesignLibrary
{
    public class Months
    {
        string[] month = new string[] {"Jan", "Feb", "..."};

        public string this[int index]
        {
            get
            {
                return month[index];
            }
        }
    }
}
using namespace System;

namespace DesignLibrary
{
    public ref class Months
    {
        array<String^>^ month;

    public:
        property String^ default[int]
        {
           String^ get(int index)
           {
              return month[index];
           }
           void set(int index, String^ value)
           {
              month[index] = value;
           }
        }

        Months()
        {
            month = gcnew array<String^>(12);
            month[0] = "Jan";
            month[1] = "Feb";
            //...;
        }
    };
}

Verwandte Regeln

CA1023: Indexer sollten nicht mehrdimensional sein

CA1024: Nach Möglichkeit Eigenschaften verwenden