コンパイラ エラー CS0021

更新 : 2007 年 11 月

エラー メッセージ

角かっこ [] 付きインデックスを 'type' 型の式に適用することはできません。

インデクサ (C# プログラミング ガイド) をサポートしないデータ型に対し、インデクサによって値にアクセスしようとしました。

C++ アセンブリでインデクサの使用を試みると、CS0021 エラーが発生することがあります。この場合は、既定のインデクサを C# コンパイラが判別できるように、C++ クラスに DefaultMember 属性を適用します。次の例では CS0021 エラーが生成されます。

使用例

このエラーを生成するには、次のファイルを (DefaultMember 属性をコメント アウトして) コンパイルし、.dll ファイルを作成します。

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

次のコードは、この .dll ファイルを呼び出す C# ファイルです。このファイルは、インデクサ経由でクラスへのアクセスを試みますが、既定のインデクサとして宣言されたメンバが存在しないため、エラーが生成されます。

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