What is C# equivalent of Java's Enumeration<>

本文关键字:Enumeration lt gt is equivalent of Java What | 更新日期: 2023-09-27 18:23:35

我有一个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中的部分?

What is C# equivalent of Java's Enumeration<>

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

但你也应该读一下控制结构的性能差异';对于';和';foreach';在C#中

我正试图在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的可能的隐式转换。如果框架不了解如何在类型之间进行映射,则可以定义自己的转换。

List实现了IEnumerable,因此您可以这样做:

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

使用foreach循环

foreach(var x in route)
{
}