Erreur du compilateur CS0021
Mise à jour : novembre 2007
Message d'erreur
Impossible d'appliquer l'indexation à l'aide de [] à une expression de type 'type'
Cannot apply indexing with [] to an expression of type 'type'
Une tentative a été faite pour accéder à une valeur via un indexeur sur un type de données qui ne prend pas en charge Indexeurs (Guide de programmation C#).
L'erreur CS0021 peut se produire si vous essayez d'utiliser un indexeur dans un assembly C++. Dans ce cas, décorez la classe C++ avec l'attribut DefaultMember de façon à ce que le compilateur C# sache quel indexeur est celui par défaut. L'exemple suivant génère l'erreur CS0021.
Exemple
Ce fichier effectue une compilation dans un fichier .dll (avec l'attribut DefaultMember transformé en commentaire) pour 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) {}
}
};
Ce qui suit est le fichier C# qui appelle le fichier .DLL. Ce fichier tente d'accéder à la classe via un indexeur, mais puisque aucun membre n'a été déclaré comme indexeur par défaut à utiliser, l'erreur est générée.
// CS0021.cs
// compile with: /reference:CPP0021.dll
public class MyClass
{
public static void Main()
{
MyClassMC myMC = new MyClassMC();
int j = myMC[1]; // CS0021
}
}