什么是Java Enumeration的C#等价物<>

时间:2013-07-17 07:16:13

标签: c# java enumeration

我有一个类似以下的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#?

4 个答案:

答案 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)
{

}