Error del compilador CS0021

Actualización: noviembre 2007

Mensaje de error

No se puede aplicar la indización con [] a una expresión del tipo 'tipo'
Cannot apply indexing with [] to an expression of type 'type'

Se intentó obtener acceso a un valor a través de un indizador en un tipo de datos que no admite Indizadores (Guía de programación de C#).

Es posible que reciba CS0021 si intenta utilizar un indizador en un ensamblado de C++. En este caso, decore la clase de C++ con el atributo DefaultMember de modo que el compilador de C# sepa qué indizador es el predeterminado. El código siguiente genera el error CS0021:

Ejemplo

Este archivo se compila a un archivo .dll (con el atributo DefaultMember marcado como comentario) para generar el error.

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

A continuación figura el archivo C# que llama al archivo .dll. Este archivo intenta tener acceso a la clase a través de un indizador, pero se genera el error porque no se ha declarado ningún miembro como indizador predeterminado para su uso.

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