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 Int32, Int64, Object o 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