Lire en anglais

Partager via


Erreur du compilateur CS0021

Impossible d’appliquer l’indexation à l’aide de [] à une expression de type 'type'

L’utilisateur a tenté d’accéder à une valeur via un indexeur dans un type de données qui ne prend pas en charge Indexers.

L’erreur CS0021 peut se produire quand vous tentez d’utiliser un indexeur dans un assembly C++. Dans ce cas, décorez la classe C++ avec l’attribut DefaultMember pour que le compilateur C# puisse connaître l’indexeur par défaut. L’exemple suivant génère l’erreur CS0021 :

Exemple

L’exemple C++ suivant est compilé dans un fichier .dll. Notez que l’attribut DefaultMember est commenté afin de générer l’erreur.

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

L’exemple C# suivant appelle le fichier .dll. Il tente d’accéder à la classe via un indexeur, mais parce qu’aucun membre n’a été déclaré en tant qu’indexeur par défaut, l’erreur est générée. Vous pouvez résoudre l’erreur en supprimant les marques de commentaire de la ligne [DefaultMember("myItem")] dans le fichier .cpp de l’exemple précédent.

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