Erro do Compilador CS0021

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

Foi feita uma tentativa de acessar um valor por meio de um indexador em um tipo de dados que não dá suporte a Indexadores.

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

Exemplo

O exemplo C++ a seguir é compilado em um arquivo .dll. Observe que é inserida uma marca de comentário no atributo DefaultMember 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 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 removendo a marca de comentário da linha [DefaultMember("myItem")] no arquivo .cpp do 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
    }
}