Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Błąd kompilatora CS0021

Nie można zastosować indeksowania z elementem [] do wyrażenia typu "type"

Podjęto próbę uzyskania dostępu do wartości za pośrednictwem indeksatora dla typu danych, który nie obsługuje indeksatorów.

Plik CS0021 może zostać wyświetlony podczas próby użycia indeksatora w zestawie C++. W tym przypadku udekoruj klasę języka C++ atrybutem DefaultMember , aby kompilator języka C# wiedział, który indeksator jest domyślny. Poniższy przykład generuje plik CS0021.

Przykład

Poniższy przykład języka C++ kompiluje się do pliku .dll. Należy pamiętać, że atrybut DefaultMember jest skomentowany w celu wygenerowania błędu.

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

Poniższy przykład w języku C# wywołuje plik .dll. Próbuje uzyskać dostęp do klasy za pośrednictwem indeksatora, ale ponieważ żaden element członkowski nie został zadeklarowany jako domyślny indeksator, generowany jest błąd. Błąd można rozwiązać, usuwając komentarz z wiersza [DefaultMember("myItem")] w pliku .cpp w poprzednim przykładzie.

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