CA1023: Gli indicizzatori non devono essere multidimensionali

Articolo Valore
ID regola CA1023
Category Microsoft.Design
Modifica Interruzione

Causa

Un tipo pubblico o protetto contiene un indicizzatore pubblico o protetto che usa più indici.

Descrizione regola

Gli indicizzatori, ovvero le proprietà indicizzate, devono usare un singolo indice. Gli indicizzatori multidimensionali possono ridurre significativamente l'usabilità della libreria. Se la progettazione richiede più indici, riconsiderare se il tipo rappresenta un archivio dati logico. In caso contrario, usare un metodo .

Come correggere le violazioni

Per correggere una violazione di questa regola, modificare la progettazione in modo da usare un indice intero solitario o stringa oppure usare un metodo anziché l'indicizzatore.

Quando eliminare gli avvisi

Eliminare un avviso da questa regola solo dopo aver considerato attentamente la necessità dell'indicizzatore non standard.

Esempio

Nell'esempio seguente viene illustrato un tipo, DayOfWeek03, con un indicizzatore multidimensionale che viola la regola. L'indicizzatore può essere considerato come un tipo di conversione e pertanto viene esposto in modo più appropriato come metodo. Il tipo viene riprogettato in RedesignedDayOfWeek03 per soddisfare la regola.

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: Usare argomento di tipo stringa o integrale per gli indicizzatori

CA1024: Usare proprietà dove appropriato