可以使用Reflection?
访问数组元素例如,如果我有数组
array<String^>^ Strings_Array=gcnew array<String^>{"One","Two","Three"};
功能
Replace_Two(Object^ Strings_Array)
{
Type^ Array_Type=Strings_Array->GetType();
String^ Array_Type_Name=Array_Type->ToString(); //it is "System.ValueType[]"
//make magic to replace "Two" to "Four"
}
可以不进行类型转换吗?
array<String^>^ Finction_Strings_Array=(array<String^>^)Strings_Array;
谢谢
答案 0 :(得分:2)
在这种情况下,反思不会给你任何东西。 GetType()返回的类型是动态生成的类型,您从未在代码中的任何位置声明过。它来自System::Array
。您需要事先了解对象实际上是一个数组,以便您可以合理地索引元素。鉴于该要求,转换为System :: Array更简单。像这样:
void Replace_Two(Object^ Strings_Array) {
Array^ arr = safe_cast<Array^>(Strings_Array);
arr->SetValue("Four", 2);
}
你可以为此添加一堆代码,检查数组的等级以确保它是一维的。并仔细检查您使用的索引是否超出范围。但是你没必要,CLR无论如何都会产生一个很好的例外。