Поделиться через


Ошибка компилятора CS0021

Обновлен: Ноябрь 2007

Сообщение об ошибке

Невозможно применить индексирование с использованием [] к выражению типа "тип"
Cannot apply indexing with [] to an expression of type 'type'

Выполнена попытка доступа к значению через индексатор или тип данных, который не поддерживает Индексаторы (руководство по программированию в C#).

Ошибка CS0021 может возникнуть при попытке использовать индексатор в сборке C++. В этом случае оформите класс C++ атрибутом DefaultMember, чтобы указать компилятору C# индексатор по умолчанию. Этот пример приводит к возникновению ошибки CS0021:

Пример

Этот файл компилируется в DLL-файл с закомментированным атрибутом DefaultMember для возникновения ошибки.

// 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-файл. Файл пытается получить доступ к классу через индексатор, но так как не были объявлены члены и используется индексатор по умолчанию, возникает ошибка.

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