CA1043: インデクサーには整数または文字列引数を使用します
TypeName |
UseIntegralOrStringArgumentForIndexers |
CheckId |
CA1043 |
カテゴリ |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
パブリック型またはプロテクト型に、System.Int32、System.Int64、System.Object、または System.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";
//...;
}
};
}