Errore del compilatore CS0021

Aggiornamento: novembre 2007

Messaggio di errore

Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'tipo'.
Cannot apply indexing with [] to an expression of type 'type'

È stato effettuato un tentativo di accesso a un valore tramite l'applicazione di un indicizzatore a un tipo di dati che non supporta Indicizzatori (Guida per programmatori C#).

L'errore CS0021 può essere generato se si tenta di utilizzare un indicizzatore in un assembly C++. In questo caso, contrassegnare la classe C++ con l'attributo DefaultMember per indicare al compilatore C# l'indicizzatore predefinito. Il codice di esempio riportato di seguito genera l'errore CS0021

Esempio

Il seguente file viene compilato in un file DLL, con l'attributo DefaultMember impostato come commento, in modo da generare l'errore.

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

Il seguente file C# esegue la chiamata del file DLL. Questo file tenta di accedere alla classe mediante un indicizzatore, ma poiché nessun membro è stato dichiarato come l'indicizzatore predefinito da utilizzare, viene generato l'errore.

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