1

クエリして更新したいリストがあります。その仕組みは次のとおりです。

List<PingtreeNode> nodes = new List<PingtreeNode>();
... add some nodes

var activeNodes = nodes.Where(x => x.Status == PingtreeNodeStatus.Active);

foreach(var n in activeNodes)
{
  n.Status = PingtreeNodeStatus.Applied;
}

Status でフィルタリングし、元のクエリに基づいて Status を更新しているため、これが完全に安全かどうかはわかりません。

アドバイスをいただければ幸いです

4

1 に答える 1

1

はい、これは完全に安全です。コレクションを変更する (つまり、アイテムを追加/削除する) のではなく、アイテムを変更するだけだからです。これは今後のクエリに影響しますが、最新ではありません。

foreachステートメントでクエリを使用している場合、列挙子が作成されます。基になるコレクション (ノード リスト) の順序で項目を 1 つずつ移動し、項目がフィルターに一致するかどうかを確認します。そのようなアイテムが見つかった場合、それは現在のものとして返されます。このアイテムは既に取得しているため、自由に変更できます。次の反復では、列挙子は停止した時点からソース項目の列挙を続行します。

于 2013-06-13T14:17:55.340 に答える