CA1043: インデクサーには整数または文字列引数を使用します

TypeName

UseIntegralOrStringArgumentForIndexers

CheckId

CA1043

分類

Microsoft.Design

互換性に影響する変更点

あり

原因

パブリック型またはプロテクト型に、Int32Int64Object、または String 以外のインデックス型を使用するパブリック インデクサーまたはプロテクト インデクサーが含まれます。

規則の説明

インデクサー、言い換えるとインデックスされたプロパティでは、インデックスに整数型または文字列型を使用します。一般に、このような型はデータ構造のインデックス作成に使用され、ライブラリの操作感も改善されます。Object 型の使用は、デザイン時に特定の整数型または文字列型を指定できない場合に限定してください。デザインでインデックスにその他の型が必要な場合は、該当する型が論理的なデータ ストアを表しているかどうかを再確認します。論理的なデータ ストアを表していない場合、メソッドを使用します。

違反の修正方法

この規則違反を修正するには、インデックスを整数型または文字列型に変更するか、インデクサーではなくメソッドを使用するようにします。

警告を抑制する状況

標準的ではないインデクサーの必要性を十分に考慮したうえで、この規則による警告を抑制します。

使用例

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

関連規則

CA1023: インデクサーを多次元にすることはできません

CA1024: 適切な場所にプロパティを使用します