コンパイラ エラー 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
}
}