Share via


Indexer sollten nicht mehrdimensional sein

Aktualisiert: November 2007

     TypeName

IndexersShouldNotBeMultidimensional

CheckId

CA1023

Kategorie

Microsoft.Design

Unterbrechende Änderung

Breaking

Ursache

Ein öffentlicher oder geschützter Typ enthält einen öffentlichen oder geschützten Indexer, der mehrere Indizes verwendet.

Regelbeschreibung

Indexer, d. h. indizierte Eigenschaften, sollten einen einzelnen Index verwenden. Wegen mehrdimensionaler Indexer kann die Verwendbarkeit der Bibliothek deutlich abnehmen. Wenn der Entwurf mehrere Indizes erfordert, sollten Sie erneut prüfen, ob es sich bei dem Typ um einen logischen Datenspeicher handelt. Wenn dies nicht der Fall ist, verwenden Sie eine Methode.

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, ändern Sie den Entwurf, sodass nur ein Ganzzahl- oder Zeichenfolgenindex verwendet wird, oder verwenden Sie anstelle des Indexers eine Methode.

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

Das folgende Beispiel zeigt einen Typ (DayOfWeek03) mit einem mehrdimensionalen Indexer, der gegen die Regel verstößt. Der Indexer fungiert als eine Art Konvertierung und sollte daher eher als Methode zur Verfügung gestellt werden. Der Typ wird in RedesignedDayOfWeek03 so umgestaltet, dass er der Regel entspricht.

Imports System

Namespace DesignLibrary

    Public Class DayOfWeek03

        Private dayOfWeek(,) As String = {{"Wed", "Thu", "..."}, _
                                          {"Sat", "Sun", "..."}}
                                          ' ...

        Default ReadOnly Property Item(month As Integer, day As Integer) As String
            Get
                Return dayOfWeek(month - 1, day - 1)
            End Get
        End Property

    End Class

    Public Class RedesignedDayOfWeek03

        Private dayOfWeek() As String = _
            {"Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"}
        Private daysInPreviousMonth() As Integer = _
            {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30}

        Function GetDayOfWeek(month As Integer, day As Integer) As String
            Return dayOfWeek((daysInPreviousMonth(month - 1) + day) Mod 7)
        End Function

    End Class

End Namespace
using System;

namespace DesignLibrary
{
    public class DayOfWeek03
    {
        string[,] dayOfWeek = {{"Wed", "Thu", "..."}, 
                               {"Sat", "Sun", "..."}};
                               // ...

        public string this[int month, int day]
        {
            get
            {
                return dayOfWeek[month - 1, day - 1];
            }
        }
    }

    public class RedesignedDayOfWeek03
    {
        string[] dayOfWeek = 
            {"Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"};

        int[] daysInPreviousMonth = 
            {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};

        public string GetDayOfWeek(int month, int day)
        {
            return dayOfWeek[(daysInPreviousMonth[month - 1] + day) % 7];
        }
    }
}
using namespace System;

namespace DesignLibrary
{
    public ref class DayOfWeek03
    {
        array<String^, 2>^ dayOfWeek;

    public:
        property String^ default[int,  int]
        {
            String^ get(int month, int day)
            {
                return dayOfWeek[month - 1, day - 1];
            }
        }

        DayOfWeek03()
        {
            dayOfWeek = gcnew array<String^, 2>(12, 7);
            dayOfWeek[0,0] = "Wed";
            dayOfWeek[0,1] = "Thu";
            // ...
            dayOfWeek[1,0] = "Sat";
            dayOfWeek[1,1] = "Sun";
            // ...
        }
    };

    public ref class RedesignedDayOfWeek03
    {
        static array<String^>^ dayOfWeek = 
            {"Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"};

        static array<int>^ daysInPreviousMonth = 
            {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};

    public:
        String^ GetDayOfWeek(int month, int day)
        {
            return dayOfWeek[(daysInPreviousMonth[month - 1] + day) % 7];
        }
    };
}

Verwandte Regeln

Ganzzahliges Argument oder Zeichenfolgenargument für Indexer verwenden

Nach Möglichkeit Eigenschaften verwenden