我有一个类似以下的Java代码块:
Vector<NameAddress> route = dialog.getRoute();
for ( Enumeration<NameAddress> e = route.elements(); e.hasMoreElements(); ) {
// some more to copy route to another Vector<>
}
我正在尝试用C#转换它,这是我的错误代码:
List<NameAddress> route = dialog.getRoute();
for ( IEnumerable<NameAddress> e = route.All; e.hasMoreElements(); ) {
// some more to copy route to another List<>
}
如何解决枚举&lt;&gt;参与c#?
答案 0 :(得分:3)
List<string> names = dialog.GetNames();
foreach(string name in names)
{
}
但你也应该读这个 Performance difference for control structures 'for' and 'foreach' in C#
答案 1 :(得分:1)
列表实现IEnumerable
所以你可以这样做:
List<NameAddress> route = dialog.getRoute();
foreach (var e in route)
{
}
答案 2 :(得分:1)
我正在尝试用C#转换它,这是我的错误代码:
如果你用什么方式描述你的代码是错误的,那会更有用,但我有一个不同的问题:
为什么要首先手动复制项目?
如果您只是想将项目从一个集合复制到另一个集合,List<T>
提供了一个构造函数List<T>(IEnumerable<T>)
,它可以完全按照您的需要执行:将项目从源集合复制到新创建的集合。
取代你的代码
List<NameAddress> route = dialog.getRoute();
for ( IEnumerable<NameAddress> e = route.All; e.hasMoreElements(); ) {
// some more to copy route to another List<>
}
更短
List<NameAddress> newRoute = new List<NameAddress>(dialog.getRoute());
由于MSDN声明构造函数是一个O(n)操作,它几乎肯定会在引擎盖下进行相同类型的迭代,但不是自己编写它,而是利用它已经被编写为一部分框架。将项目从一个列表复制到另一个列表是一种非常常见的操作。
对于IEnumerable<T1> dialog.getRoute()
和List<T2>
,唯一的要求是存在从T1到T2的可能的隐式转换。如果框架不了解如何在类型之间进行映射,则可以define your own conversion。
答案 3 :(得分:-1)
使用foreach循环
foreach(var x in route)
{
}