Share via


Ganzzahliges Argument oder Zeichenfolgenargument für Indexer verwenden

Aktualisiert: November 2007

     TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

Kategorie

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 System.Int32, System.Int64, System.Object oder System.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.

Behandlung 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

Indexer sollten nicht mehrdimensional sein

Nach Möglichkeit Eigenschaften verwenden