次の方法で共有


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

関連規則

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

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