Используйте целый или строковый аргумент для индексаторов
Обновлен: Ноябрь 2007
TypeName |
UseIntegralOrStringArgumentForIndexers |
CheckId |
CA1043 |
Категория |
Microsoft.Design |
Критическое изменение |
Критическое |
Причина
Открытый или защищенный тип содержит открытый или защищенный индексатор, использующий тип индекса, отличный от System.Int32, System.Int64, System.Object или System.String.
Описание правила
Индексаторы, то есть индексированные свойства, должны использовать для индекса целочисленные или строковые типы. Эти типы обычно используются для индексации структур данных и повышения удобства использования библиотеки. Тип Object следует использовать только в том случае, если во время разработки невозможно указать определенный целочисленный или строковый тип. Если в программе требуется использовать другие типы индекса, проверьте еще раз, представляет ли тип логическое хранилище данных. Если тип не представляет логическое хранилище данных, используйте метод.
Предотвращение нарушений
Чтобы устранить нарушение данного правила, укажите для индекса целочисленный или строковый тип или используйте вместо индексатора метод.
Отключение предупреждений
Предупреждения о нарушении этого правила следует отключать только после тщательной проверки необходимости использовать нестандартный индексатор.
Пример
В следующем примере показан индексатор, который использует индекс типа 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";
//...;
}
};
}