2012-10-03 58 views

回答

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)); 
+0

在托管代码中使用safe_cast。 –

+0

reinterpret_cast直接从MSDN复制。 http://msdn.microsoft.com/en-us/library/fcyyh2hb.aspx并单击C++的语言。 –

+0

好的,无视那个。得到OP使用'List '。 –

相关问题