영어로 읽기

다음을 통해 공유


컴파일러 오류 CS0021

[]를 사용하는 인덱싱을 'type' 형식의 식에 적용할 수 없습니다.

Indexers를 지원하지 않는 데이터 형식의 인덱서를 통해 값에 액세스하려고 했습니다.

C++ 어셈블리에서 인덱서를 사용하려고 하면 CS0021이 발생할 수 있습니다. 이 경우 DefaultMember 특성으로 C++ 클래스를 데코레이팅하여 C# 컴파일러에서 기본 인덱서를 알 수 있도록 합니다. 다음 샘플에서는 CS0021을 생성합니다.

예시

다음 C++ 예는 .dll 파일로 컴파일됩니다. 오류를 생성하기 위해 DefaultMember 특성이 주석 처리되어 있습니다.

C++
// CPP0021.cpp
// compile with: /clr /LD
using namespace System::Reflection;
// Uncomment the following line to resolve
//[DefaultMember("myItem")]
public ref class MyClassMC
{
        public:
        property int myItem[int]
        {
            int get(int i){  return 5; }
            void set(int i, int value) {}
        }
};

다음 C# 예에서는 .dll 파일을 호출합니다. 인덱서를 통해 클래스에 액세스하려고 시도하지만 기본 인덱서로 선언된 멤버가 없기 때문에 오류가 발생합니다. 이전 예의 .cpp 파일에서 [DefaultMember("myItem")] 줄의 주석 처리를 제거하여 오류를 해결할 수 있습니다.

C#
// CS0021.cs
// compile with: /reference:CPP0021.dll
public class MyClass
{
    public static void Main()
    {
        MyClassMC myMC = new MyClassMC();
        int j = myMC[1]; // CS0021
    }
}