CA1043: 인덱서에 정수 또는 문자열 인수를 사용하십시오.
TypeName |
UseIntegralOrStringArgumentForIndexers |
CheckId |
CA1043 |
범주 |
Microsoft.Design |
변경 수준 |
주요 변경 |
원인
public 또는 protected 형식에 System.Int32, System.Int64, System.Object 또는 System.String 이외의 인덱스 형식을 사용하는 public 또는 protected 인덱서가 들어 있습니다.
규칙 설명
인덱서, 즉 인덱싱된 속성은 인덱스에 정수 또는 문자열 형식을 사용해야 합니다. 이러한 형식은 대개 데이터 구조를 인덱싱하는 데 사용되며 라이브러리의 유용성을 증가시킵니다. 디자인 타임에 특정 정수 또는 문자열 형식을 지정할 수 없는 경우에는 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";
//...;
}
};
}