CA1023: Indexadores não devem ser multidimensionais

Item Valor
RuleId CA1023
Categoria Microsoft.Design
Alteração da falha Quebra

Causa

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

Descrição da regra

Os indicadores (ou seja, propriedades indexadas) devem usar um único índice. Os indicadores multidimensionais podem reduzir significativamente a usabilidade da biblioteca. Se o design exigir vários índices, reconsidere se o tipo representa um armazenamento lógico de dados. Caso contrário, use um método.

Como corrigir violações

Para corrigir uma violação dessa regra, altere o design para usar um índice de cadeia de caracteres ou inteiro único ou use um método em vez do indexador.

Quando suprimir avisos

Suprima um aviso dessa regra somente depois de considerar cuidadosamente a necessidade do indexador não padrão.

Exemplo

O exemplo a seguir mostra um tipo, DayOfWeek03, com um indexador multidimensional que viola a regra. O indexador pode ser visto como um tipo de conversão e, portanto, é exposto mais adequadamente como um método. O tipo é reprojetado no RedesignedDayOfWeek03 para atender à regra.

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

CA1043: Usar argumento integral ou de cadeia de caracteres para indexadores

CA1024: Usar propriedades quando apropriado