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.
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
}
}
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: