Condividi tramite


CA0143: Utilizzare argomento di tipo stringa o integrale per gli indicizzatori

TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

Category

Microsoft.Design

Breaking Change

Breaking

Causa

Un tipo pubblico o protetto contiene un indicizzatore pubblico o protetto che utilizza un tipo di indice diverso da System.Int32, System.Int64, System.Object o System.String.

Descrizione della regola

Gli indicizzatori, ossia proprietà indicizzate, devono utilizzare tipi integer o string per l'indice. Questi tipi sono in genere utilizzati per l'indicizzazione di strutture di dati e aumentano l'utilizzabilità della libreria. L'utilizzo del tipo Object deve essere limitato ai casi in cui non è possibile specificare in fase di progettazione il tipo integer o string specifico. Se la progettazione richiede altri tipi per l'indice, valutare se il tipo rappresenta un archivio dati logico. In caso contrario, utilizzare un metodo.

Come correggere le violazioni

Per correggere una violazione di questa regola, modificare l'indice in un tipo integer o string oppure utilizzare un metodo anziché l'indicizzatore.

Esclusione di avvisi

Escludere un avviso da questa regola solo dopo aver considerato attentamente la necessità di un indicizzatore non standard.

Esempio

Nell'esempio riportato di seguito viene illustrato un indicizzatore che utilizza un indice Int32.

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";
            //...;
        }
    };
}

Regole correlate

CA1023: Gli indicizzatori non devono essere multidimensionali

CA1024: Utilizzare proprietà dove appropriato