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

私は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 に答える