編譯器錯誤 CS0021
無法套用有 [] 的索引至類型 'type' 的運算式
嘗試透過不支援 Indexers的資料類型上的索引子來存取值。
嘗試在 C++ 組件中使用索引子時,可能會得到 CS0021。 在此情況下,請為 C++ 類別加上 DefaultMember
屬性,讓 C# 編譯器知道哪一個索引子是預設值。 下列範例會產生 CS0021:
下列 C++ 範例會編譯成 .dll 檔案。 請注意,DefaultMember 屬性會標記為註解以產生錯誤。
C++
// 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")]
行標記為註解,以解決錯誤。
C#
// CS0021.cs
// compile with: /reference:CPP0021.dll
public class MyClass
{
public static void Main()
{
MyClassMC myMC = new MyClassMC();
int j = myMC[1]; // CS0021
}
}