Поделиться через


Используйте целый или строковый аргумент для индексаторов

Обновлен: Ноябрь 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";
            //...;
        }
    };
}

Связанные правила

Индексы не должны быть многомерными

Используйте свойства, если это уместно