Share via


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

Item [値]
規則 ID CA1023
カテゴリ Microsoft.Design
互換性に影響する変更点 あり

原因

パブリックまたはプロテクト型に、複数のインデックスを使用するパブリック インデクサーまたはプロテクト インデクサーが含まれています。

規則の説明

インデクサー (つまり、インデックス付きのプロパティ) では、インデックスを 1 つだけ使用します。 多次元のインデクサーがあると、ライブラリの操作性が著しく低下することがあります。 設計上、複数のインデクサーが必要になる場合、型が論理的なデータ ストアを表すかどうかを再検討してください。 そうでない場合は、メソッドを使用します。

違反の修正方法

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

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

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

次の例は、規則に違反する多次元インデクサーを持つ型 DayOfWeek03 を示しています。 インデクサーは変換の一種と見なすことができるため、メソッドとして公開される方が適切です。 この型は、規則を満たすように RedesignedDayOfWeek03 で再設計されています。

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];
        }
    }
}

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

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