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