Partilhar via


CA1023: os indexadores não devem ser multidimensionais

TypeName

IndexersShouldNotBeMultidimensional

CheckId

CA1023

Categoria

Microsoft.Design

Alteração Significativa

Quebra

Causa

Um público ou um tipo protegido contêm um público ou um indicador protegido que usa mais de um índice.

Descrição da Regra

Os indicadores, ou seja, indexados propriedades, devem usar um único índice.Os indicadores multidimensionais podem reduzir significativamente a usabilidade de biblioteca.Se o design requer mais índices, reconsidere se o tipo representa um repositório de dados lógico.Se não, use um método.

Como Corrigir Violações

Para corrigir uma violação desta regra, alterar o design para usar um inteiro ou um índice solitário de cadeia de caracteres, ou usar um método em vez do medidor.

Quando Suprimir Alertas

Suprima um aviso desta regra somente depois cuidadosamente a consideração da necessidade do medidor não padrão.

Exemplo

O exemplo a seguir mostra um tipo, DayOfWeek03, com um indicador multidimensional que viola a regra.O indicador pode ser consultado como um tipo de conversão e em virtude disso é exposta mais adequadamente como um método.O tipo é em RedesignedDayOfWeek03 atendido para a regra.

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];
        }
    };
}

Regras Relacionadas

CA1043: usar argumento integral ou da cadeia de caracteres para indexadores

CA1024: usar propriedades quando apropriado