编译器错误 CS0021
无法将带 [] 的索引应用于“type”类型的表达式
尝试针对不支持 Indexers的数据类型使用索引器访问值。
在 C++ 程序集中尝试使用索引器时,可能会遇到 CS0021。 在这种情况下,请用 DefaultMember
特性修饰 C++ 类,让 C# 编译器能够识别默认索引器。 下面的示例生成 CS0021。
以下 C++ 示例编译为 .dll 文件。 请注意,为了生成错误,DefaultMember 属性会被注释掉。
// 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) {}
}
};
以下 C# 示例调用 .dll 文件。 它会尝试通过索引器访问类,但由于没有将任何成员声明为默认索引器,因此产生了此错误。 可通过取消注释上一示例中 .cpp 文件的 [DefaultMember("myItem")]
行来解决此错误。
// CS0021.cs
// compile with: /reference:CPP0021.dll
public class MyClass
{
public static void Main()
{
MyClassMC myMC = new MyClassMC();
int j = myMC[1]; // CS0021
}
}