Compartir a través de


CA1043: Utilizar argumento integral o de cadena para los indizadores

TypeName

UseIntegralOrStringArgumentForIndexers

Identificador de comprobación

CA1043

Categoría

Microsoft.Design

Cambio problemático

Problemático

Motivo

Un tipo público o protegido contiene un indizador público o protegido que utiliza un tipo de índice distinto de Int32, Int64, Object o String.

Descripción de la regla

Los indizadores, es decir, las propiedades indizadas, deben utilizar tipos enteros o de cadena para el índice.Estos tipos se utilizan normalmente para indizar las estructuras de datos y aumentar la utilidad de la biblioteca.El uso del tipo Object debería limitarse a los casos en los que el tipo entero o de cadena no se puede especificar en tiempo de diseño.Si el diseño requiere otros tipos para el índice, reconsidere si el tipo representa un almacén de datos lógico.Si no representa un almacén de datos lógico, utilice un método.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie el índice a un tipo entero o de cadena, o utilice un método en lugar del indizador.

Cuándo suprimir advertencias

Sólo suprima con cuidado una advertencia de esta regla después de tener en cuenta la necesidad del indizador no estándar.

Ejemplo

El ejemplo siguiente muestra un indizador que utiliza un índice 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";
            //...;
        }
    };
}

Reglas relacionadas

CA1023: Los indizadores no deben ser multidimensionales

CA1024: Utilizar las propiedades donde corresponda