Auf Englisch lesen

Freigeben über


Compilerfehler CS0021

Eine Indizierung mit [] kann nicht auf einen Ausdruck vom Typ „type“ angewendet werden.

Es wurde versucht, auf einen Wert über einen Indexer für einen Datentyp zuzugreifen, der Indexersnicht unterstützt.

Wenn Sie versuchen, einen Indexer in einer C++-Assembly zu verwenden, erhalten Sie möglicherweise den Fehler CS0021. In diesem Fall ergänzen Sie die C++-Klasse mit dem DefaultMember -Attribut, damit der C#-Compiler weiß, welcher Indexer standardmäßig verwendet wird. Im folgenden Beispiel wird CS0021 generiert:

Beispiel

Das folgende C++-Beispiel wird in eine DLL-Datei kompiliert. Beachten Sie, dass das DefaultMember-Attribut auskommentiert ist, um den Fehler zu generieren.

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

Das folgende C#-Beispiel ruft wird die DLL-Datei auf. Es wird versucht, über einen Indexer auf die Klasse zuzugreifen. Da aber kein Member als Standardindexer deklariert wurde, wird der Fehler generiert. Sie können den Fehler beheben, indem Sie die Auskommentierung der Zeile [DefaultMember("myItem")] in der CPP-Datei im vorherigen Beispiel aufheben.

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