使用反射访问数组成员

时间:2014-12-23 15:49:30

标签: .net arrays visual-studio reflection c++-cli

可以使用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;

谢谢

1 个答案:

答案 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无论如何都会产生一个很好的例外。