如何从ArrayList转换为cli :: array?

时间:2012-10-03 16:09:57

标签: .net arraylist c++-cli

如何将System::Collections::ArrayList(例如包含System::String^)转换为cli::array<String^>数组?

1 个答案:

答案 0 :(得分:3)

如果ArrayList在您的代码中并且您可以更改它,请考虑将其更改为List<String^>。在使用类时,您将获得类型安全,更清晰的代码,更多可用的Linq方法,并且该类上的常规内置方法将返回array<String^>,而无需跳过任何环节。


ArrayList上有一个内置方法可以帮到你。调用ToArray,并指定要返回的数组的类型。

ArrayList^ list = ...;
array<String^>^ ar = reinterpret_cast<array<String^>^>(list->ToArray(String::typeid));

如果您使用其他集合类型(不使用泛型)进行此操作,则必须执行更多手动操作。你可以手工完成:

ArrayList^ list = ...;
array<String^>^ ar = gcnew array<String^>(list.Count);
for(int i = 0; i < list.Count; i++)
    ar[i] = dynamic_cast<String^>(list[i]);

或者您可以使用Linq将ArrayList转换为IEnumerable<String^>,然后将其转换为字符串数组。

ArrayList^ list = ...;
array<String^> ar = Enumerable::ToArray(Enumerable::OfType<String^>(list));