CS0021 de erro do compilador

Mensagem de erro

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

Foi feita uma tentativa para acesso um valor por meio de um indexador em um tipo de dados que não oferece suporte a Indexadores (guia de programação C#).

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

Exemplo

Este arquivo é compilado em um arquivo .dll — com o DefaultMember atributo comentada — 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) {}
        }
};

Este é o arquivo translation from VPE for Csharp que chama o arquivo .dll do.Este arquivo tenta acessar a classe por meio de um indexador, mas porque nenhum membro foi declarado sistema autônomo o indexador padrão a ser usado, o erro é gerado.

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