如何将System::Collections::ArrayList
(例如包含System::String^
)转换为cli::array<String^>
数组?
答案 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));