CA1043: Use o argumento integral ou de seqüência de caracteres para indexadores

TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Quebrando

Causa

Um tipo de público ou protegido contém um indexador público ou protegido que usa um tipo de índice diferente de System.Int32, System.Int64, System.Object, ou System.String.

Descrição da regra

Os indexadores, isto é, propriedades indexadas, devem usar os tipos de inteiro ou seqüência de caracteres para o índice. Esses tipos são normalmente usados para estruturas de dados de indexação e aumentam a usabilidade da biblioteca. Usar o Object tipo deve ser restrito a esses casos onde o tipo específico de inteiro ou seqüência de caracteres não pode ser especificado em tempo de design. Se o projeto requer outros tipos para o índice, reconsidere se o tipo representa um armazenamento de dados lógicos. Se ele não representa um armazenamento de dados lógicos, use um método.

Como corrigir violações

Para corrigir uma violação desta regra, alterar o índice para um tipo inteiro ou seqüência ou usar um método em vez do indexador.

Quando suprimir avisos

Elimina um aviso esta regra somente após a consideração cuidadosa a necessidade do indexador não padrão.

Exemplo

O exemplo a seguir mostra um indexador que usa um Int32 índice.

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";
            //...;
        }
    };
}

Regras relacionadas

CA1023: Os indexadores não devem ser multidimensionais

CA1024: Use as propriedades onde for apropriado