使用英语阅读

通过


编译器错误 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
    }
}