CA1023: 다차원 인덱서는 사용하지 마십시오.

항목
RuleId CA1023
범주 Microsoft.Design
주요 변경 내용 주요 변경

원인

public 또는 protected 형식에 둘 이상의 인덱스를 사용하는 public 또는 protected 인덱서가 포함되어 있습니다.

규칙 설명

인덱서, 즉 인덱싱된 속성은 단일 인덱스를 사용해야 합니다. 다차원 인덱서를 사용하면 라이브러리의 유용성이 현저히 줄어들 수 있습니다. 디자인에 여러 인덱스가 필요한 경우 형식이 논리적 데이터 저장소를 나타내는지 여부를 다시 고려해야 합니다. 그렇지 않은 경우 메서드를 사용합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 유일한 정수 또는 문자열 인덱스를 사용하도록 디자인을 변경하거나 인덱서 대신 메서드를 사용합니다.

경고를 표시하지 않는 경우

반드시 비표준 인덱서에 대한 필요성을 신중하게 고려한 후에 해당 규칙에서 경고를 표시하지 않습니다.

예시

다음 예제에서는 규칙을 위반하는 다차원 인덱서가 포함된 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: 적합한 속성을 사용하십시오.