CA1043: Dla indeksatorów używaj argumentów integral lub string
TypeName |
UseIntegralOrStringArgumentForIndexers |
CheckId |
CA1043 |
Kategoria |
Microsoft.Design |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Typ publiczny lub chroniony zawiera publiczny lub chroniony indeksator, który używa innego typu indeksu niż Int32, Int64, Object lub String.
Opis reguły
Indeksatory (właściwości indeksowane), powinny używać dla indeksu typów całkowitych lub ciągu.Typy te są zwykle używane do indeksowania struktur danych i zwiększają one użyteczność biblioteki.Użycie typu Object powinno zostać ograniczone do przypadków, w których nie może zostać określony typ całkowity lub ciąg w czasie projektowania.Jeśli projekt wymaga innych typów indeksu, należy ponownie rozważyć, czy typ reprezentuje magazyn danych logicznych.Jeśli nie reprezentuje magazynu danych logicznych, należy użyć metody.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, należy zmienić indeks na typ liczby całkowitej lub ciąg lub metodę indeksatora.
Kiedy pominąć ostrzeżenia
Można pomijać ostrzeżenia od tej reguły, tylko po ostrożnym rozważeniu potrzeby użycia niestandardowego indeksatora.
Przykład
Poniższy przykład pokazuje indeksator, który używa indeksu 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";
//...;
}
};
}
Powiązane reguły
CA1023: Indeksatory nie powinny być wielowymiarowe
CA1024: Używaj właściwości wszędzie, gdzie jest to odpowiednie