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

プロパティ
ルール ID CA1043
Title インデクサーには整数または文字列引数を使用します
[カテゴリ] デザイン
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 いいえ

原因

型には、System.Int32System.Int64System.ObjectSystem.String 以外のインデックス型を使用するインデクサーが含まれます。

既定では、この規則の対象は外部から参照できる型のみですが、これは構成可能です。

規則の説明

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

違反の修正方法

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

どのようなときに警告を抑制するか

標準ではないインデクサーの必要性を慎重に検討した後でのみ、この規則からの警告を非表示にしてください。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1043
// The code that's violating the rule is on this line.
#pragma warning restore CA1043

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1043.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

分析するコードを構成する

次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するか構成します。

このオプションを構成できる対象は、この規則だけ、それを適用するすべての規則、それを適用するこのカテゴリ (デザイン) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。

特定の API サーフェイスを含める

ユーザー補助に基づいて、この規則を実行するコードベースの部分を構成できます。 たとえば、非パブリック API サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。

dotnet_code_quality.CAXXXX.api_surface = private, internal

次の例からは、Int32 インデックスを使用するインデクサーを確認できます。

string[] Month = new string[] { "Jan", "Feb", "..." };

public string this[int index]
{
    get => Month[index];
}
Private month() As String = {"Jan", "Feb", "..."}

Default ReadOnly Property Item(index As Integer) As String
    Get
        Return month(index)
    End Get
End Property