CA1023: Gli indicizzatori non devono essere multidimensionali
TypeName |
IndexersShouldNotBeMultidimensional |
CheckId |
CA1023 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
Un tipo pubblico o protetto contiene un indicizzatore pubblico o protetto che utilizza più di un indice.
Descrizione della regola
Gli indicizzatori, ossia proprietà indicizzate, devono utilizzare un unico indice. Gli indicizzatori multidimensionali possono ridurre sensibilmente l'utilizzabilità della libreria. Se la progettazione richiede più indici, 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 la progettazione per utilizzare un solo Integer o indice di stringa 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 tipo, DayOfWeek03, con un indicizzatore multidimensionale che viola la regola. L'indicizzatore può essere considerato come un tipo di conversione e pertanto è esposto come un metodo in modo più appropriato. Il tipo è riprogettato in RedesignedDayOfWeek03 per soddisfare la regola.
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];
}
};
}
Regole correlate
CA0143: Utilizzare argomento di tipo stringa o integrale per gli indicizzatori