Partager via


Utiliser un argument de chaîne ou intégral pour les indexeurs

Mise à jour : novembre 2007

TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

Un type public ou protégé contient un indexeur public ou protégé qui utilise un type d'index autre que System.Int32, System.Int64, System.Object ou System.String.

Description de la règle

Les indexeurs, c'est-à-dire les propriétés indexées, doivent utiliser des types entier ou de chaîne pour l'index. Ces types sont généralement utilisés pour indexer des structures de données et augmentent la facilité d'utilisation de la bibliothèque. L'utilisation du type Object doit se restreindre aux cas où le type entier ou de chaîne spécifique ne peut pas être spécifié au moment du design. Si le design nécessite d'autres types pour l'index, reconsidérez le fait que le type représente ou non un magasin de données logique. S'il ne représente pas un magasin de données logique, utilisez une méthode.

Comment corriger les violations

Pour corriger une violation de cette règle, changez l'index en un type entier ou un type de chaîne, ou utilisez une méthode au lieu de l'indexeur.

Quand supprimer les avertissements

Supprimez un avertissement de cette règle uniquement après avoir soigneusement envisagé la nécessité de l'indexeur non standard.

Exemple

L'exemple suivant présente un indexeur qui utilise un index 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";
            //...;
        }
    };
}

Règles connexes

Les indexeurs ne doivent pas être multidimensionnels

Utiliser des propriétés lorsque nécessaire