Compartir a través de


Utilizar argumento integral o de cadena para los indizadores

Actualización: noviembre 2007

Nombre de tipo

UseIntegralOrStringArgumentForIndexers

Identificador de comprobación

CA1043

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un tipo público o protegido contiene un indizador público o protegido que utiliza un tipo de índice distinto de System.Int32, System.Int64, System.Object o System.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

Los indizadores no deben ser multidimensionales

Utilizar las propiedades donde corresponda