Compilerfout CS0021
Kan indexering met [] niet toepassen op een expressie van het type 'type'
Er is geprobeerd toegang te krijgen tot een waarde via een indexeerfunctie voor een gegevenstype dat geen ondersteuning biedt voor indexeerfuncties.
Mogelijk krijgt u CS0021 wanneer u probeert een indexeerfunctie te gebruiken in een C++-assembly. In dit geval verfraaid u de C++-klasse met het DefaultMember
kenmerk, zodat de C#-compiler weet welke indexeerfunctie de standaardwaarde is. In het volgende voorbeeld wordt CS0021 gegenereerd.
Het volgende C++-voorbeeld wordt gecompileerd naar een .dll-bestand. Houd er rekening mee dat het kenmerk DefaultMember is uitgeschakeld om de fout te genereren.
// 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) {}
}
};
In het volgende C#-voorbeeld wordt het .dll-bestand aanroepen. Er wordt geprobeerd toegang te krijgen tot de klasse via een indexeerfunctie, maar omdat er geen lid is gedeclareerd als de standaardindexeerfunctie, wordt de fout gegenereerd. U kunt de fout oplossen door opmerkingen bij de regel [DefaultMember("myItem")]
in het .cpp bestand in het voorgaande voorbeeld op te heffen.
// CS0021.cs
// compile with: /reference:CPP0021.dll
public class MyClass
{
public static void Main()
{
MyClassMC myMC = new MyClassMC();
int j = myMC[1]; // CS0021
}
}
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven: