Compiler Error CS0021

Cannot apply indexing with [] to an expression of type 'type'

An attempt was made to access a value through an indexer on a data type that does not support Indexers (C# Programming Guide).

You may get CS0021 when trying to use an indexer in a C++ assembly. In this case, decorate the C++ class with the DefaultMember attribute so the C# compiler knows which indexer is the default. The following sample generates CS0021.

Example

This file compiles to a .dll file—with the DefaultMember attribute commented out—in order to generate the 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) {}
        }
};

The following is the C# file that calls the .dll file. This file attempts to access the class via an indexer, but because no member was declared as the default indexer to be used, the error is generated.

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