のforeachループのリストを変更する 4.0以前のC#バージョンでは、foreachサイクルのリストを変更しようとすると、異常が発生します。ただし、.NET 4.0では、この制限がキャンセルされました。
質問:
次のコードを考慮して、ネストされた列挙を繰り返すためにforeachを使用する場合、プロジェクトをプロジェクトリストに追加する最良の方法は何ですか?
ベストプラクティス:<code class="language-csharp">foreach (var item in Enumerable) { foreach (var item2 in item.Enumerable) { item.Add(new item2); // 这行代码有问题 } }</code>
説明:
MSDNドキュメントは、Foreachステートメントが反復コレクションに使用されていることを指摘しています。ソースコレクションにアイテムを非表示または削除することはありませんが、潜在的な副作用があるため、この動作に依存しないことも警告しています。ソースコレクションを変更する必要がある場合、推奨される方法はループに使用することです。
同時コレクションは異常です:
問題で引用されているポールジャクソンのブログ記事には、セットがC#concurrentコレクションで許可されていると述べています。この例外は、同時コレクションの設定から導き出され、潜在的な副作用をさまざまな方法で処理します。 したがって、このルールは、同時コレクションには適していません。 通常のセットの場合、潜在的な問題を回避するためにサイクルを使用することをお勧めします。
以上がC# で Foreach ループを反復中にリストに項目を安全に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。