Ler em inglês

Partilhar via


Erro do compilador CS0021

Não é possível aplicar a indexação com [] a uma expressão do tipo 'tipo'

Foi feita uma tentativa de aceder a um valor através de um indexador num tipo de dados que não suporta indexadores.

Você pode obter CS0021 ao tentar usar um indexador em um assembly C++. Nesse caso, decore a classe C++ com o DefaultMember atributo para que o compilador C# saiba qual indexador é o padrão. O exemplo a seguir gera CS0021.

Exemplo

O exemplo C++ a seguir compila para um arquivo .dll. Observe que o atributo DefaultMember é comentado para gerar o erro.

// 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) {}
        }
};

O exemplo de C# a seguir chama o arquivo .dll. Ele tenta acessar a classe por meio de um indexador, mas como nenhum membro foi declarado como o indexador padrão, o erro é gerado. Você pode resolver o erro descomentando a linha [DefaultMember("myItem")] no arquivo .cpp no exemplo anterior.

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