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中的部分?
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)
{
}