このように、関数でLINQクエリの結果を返すときに、かなりの数のエラーのケースにCollection was modified; enumeration operation may not execute
遭遇しました...(インターフェイスの実装として機能する関数を追加する必要があり、結果はこのモジュールを使用するために残します別で。)
Public Function GetTheFuzzyFuzzbuzzes() As IEnumerable(of FuzzBuzz) _
Implements IFoo.GetTheFuzzyFuzzBuzzes
Return mySecretDataSource.Where(Function(x) x.IsFuzzy)
End Function
基になるデータが変更される可能性がある場合、原則として、.ToArray
LINQ クエリの結果を関数またはプロパティ getter で返すときに常に呼び出す必要がありますか? これを行うと効率が少し低下することはわかっていますが、安全に実行できると感じているため、一時的な結合の問題を回避するために常に実行する必要があります。
編集:
問題のドメインを説明するより良い仕事をさせてください。
最適化問題である主な関心領域のグラフベースの実装があります。エンティティはグラフ ノードとして表されます。さまざまなコストやその他のパラメーターで重み付けされたエッジは、ノード間の関係を表します。ユーザーがデータを操作すると、さまざまなエッジが作成され、現在の状態に対して実行できるさまざまなオプションが評価され、各オプションの結果に関するフィードバックが提供されます。他のユーザーやプログラムによってサーバー上のデータに加えられた変更は、プッシュ テクノロジを介して直ちにクライアントに伝達されます。私たちは多くのスレッドを使用しています...
...これはすべて、非常に非同期的な方法で多くのことが起こっていることを意味します。
私たちのプログラムは、(単一責任の原則に基づいて) 契約プロジェクトと実行時に解決される実装プロジェクトを含むモジュールに分割されています。つまり、インターフェイスに大きく依存しています。通常、IEnumerable を使用してモジュール間でデータを渡します (これらは一種の不変であるため)。