CA1023: インデクサーを多次元にすることはできません
TypeName |
IndexersShouldNotBeMultidimensional |
CheckId |
CA1023 |
[カテゴリ] |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
パブリック型またはプロテクト型に、複数のインデックスを使用するパブリック インデクサーまたはプロテクト インデクサーが含まれます。
規則の説明
インデクサー、言い換えるとインデックスされたプロパティでは、インデックスを 1 つだけ使用します。多次元のインデクサーがあると、ライブラリの操作性が著しく悪くなることがあります。デザインで複数のインデックスが必要な場合は、その型が論理的なデータ ストアを表しているかどうかを再確認します。論理データ メンバーでない場合は、メソッドを使用します。
違反の修正方法
この規則違反を修正するには、設計を変更し、整数型または文字列型のインデックスを 1 つだけ使用するか、インデクサーではなくメソッドを使用するようにします。
警告を抑制する状況
標準的ではないインデクサーの必要性を十分に考慮したうえで、この規則による警告を抑制します。
使用例
規則に違反している多次元のインデクサーを持つ型 DayOfWeek03 を次の例に示します。このインデクサーはある種の変換のように見えます。そのため、メソッドとして公開する方が適切です。この型は、規則に適合するように RedesignedDayOfWeek03 で再デザインしました。
Imports System
Namespace DesignLibrary
Public Class DayOfWeek03
Private dayOfWeek(,) As String = {{"Wed", "Thu", "..."}, _
{"Sat", "Sun", "..."}}
' ...
Default ReadOnly Property Item(month As Integer, day As Integer) As String
Get
Return dayOfWeek(month - 1, day - 1)
End Get
End Property
End Class
Public Class RedesignedDayOfWeek03
Private dayOfWeek() As String = _
{"Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"}
Private daysInPreviousMonth() As Integer = _
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30}
Function GetDayOfWeek(month As Integer, day As Integer) As String
Return dayOfWeek((daysInPreviousMonth(month - 1) + day) Mod 7)
End Function
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class DayOfWeek03
{
string[,] dayOfWeek = {{"Wed", "Thu", "..."},
{"Sat", "Sun", "..."}};
// ...
public string this[int month, int day]
{
get
{
return dayOfWeek[month - 1, day - 1];
}
}
}
public class RedesignedDayOfWeek03
{
string[] dayOfWeek =
{"Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"};
int[] daysInPreviousMonth =
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
public string GetDayOfWeek(int month, int day)
{
return dayOfWeek[(daysInPreviousMonth[month - 1] + day) % 7];
}
}
}
using namespace System;
namespace DesignLibrary
{
public ref class DayOfWeek03
{
array<String^, 2>^ dayOfWeek;
public:
property String^ default[int, int]
{
String^ get(int month, int day)
{
return dayOfWeek[month - 1, day - 1];
}
}
DayOfWeek03()
{
dayOfWeek = gcnew array<String^, 2>(12, 7);
dayOfWeek[0,0] = "Wed";
dayOfWeek[0,1] = "Thu";
// ...
dayOfWeek[1,0] = "Sat";
dayOfWeek[1,1] = "Sun";
// ...
}
};
public ref class RedesignedDayOfWeek03
{
static array<String^>^ dayOfWeek =
{"Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"};
static array<int>^ daysInPreviousMonth =
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
public:
String^ GetDayOfWeek(int month, int day)
{
return dayOfWeek[(daysInPreviousMonth[month - 1] + day) % 7];
}
};
}