0

我有一个 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<>
    }

如何解决 C# 中的 Enumeration<> 部分?

4

4 回答 4

3
List<string> names = dialog.GetNames();
foreach(string name in names)
{
}

但是您也应该阅读此内容 C# 中控制结构“for”和“foreach”的性能差异

于 2013-07-17T07:32:41.117 回答
1

列出实现IEnumerable,以便您可以这样做:

List<NameAddress> route = dialog.getRoute();
foreach (var e in route) 
{

}
于 2013-07-17T07:17:32.973 回答
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 的可能的隐式转换。如果框架不了解如何在类型之间进行映射,您可以定义自己的转换。

于 2013-07-17T07:49:13.910 回答
-1

使用 foreach 循环

foreach(var x in route)
{

}
于 2013-07-17T07:18:40.897 回答