如何从System::Collections::ArrayList
(包含System::String^
例如)转换为数组cli::array<String^>
?
问问题
1306 次
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 回答