2

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

4

1 回答 1

3

如果 ArrayList 在您的代码中并且您可以更改它,请考虑将其更改为List<String^>. 您将在使用该类时获得类型安全、更简洁的代码、更多可用的 Linq 方法,并且该类上的普通内置方法将返回 anarray<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));
于 2012-10-03T16:24:10.447 回答