Udostępnij za pośrednictwem


CA1043: Użyj Całka lub ciąg argumentu dla indeksatory

TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

Kategoria

Microsoft.Design

Zmiana kluczowa

Kluczowa

Przyczyna

Typ publiczny lub chroniony zawiera publiczny lub chroniony indeksator, który używa innego typu indeksu niż System.Int32, System.Int64, System.Object lub System.String.

Opis reguły

Indeksatory (właściwości indeksowane), powinny używać dla indeksu typów całkowitych lub ciągu.Typy te są zwykle używane do indeksowania struktur danych i zwiększają one użyteczność biblioteki.Użycie typu Object powinno zostać ograniczone do przypadków, w których nie może zostać określony typ całkowity lub ciąg w czasie projektowania.Jeśli projekt wymaga innych typów indeksu, należy ponownie rozważyć, czy typ reprezentuje magazyn danych logicznych.Jeśli nie reprezentuje magazynu danych logicznych, należy użyć metody.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy zmienić indeks na typ liczby całkowitej lub ciąg lub metodę indeksatora.

Kiedy pominąć ostrzeżenia

Można pomijać ostrzeżenia od tej reguły, tylko po ostrożnym rozważeniu potrzeby użycia niestandardowego indeksatora.

Przykład

Poniższy przykład pokazuje indeksator, który używa indeksu 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";
            //...;
        }
    };
}

Powiązane reguły

CA1023: Indeksatory nie powinny być wielowymiarowe

CA1024: Użyj właściwości, gdzie stosowne