LINQを使用するようにコードを変更したい。ここリストでLINQを使用するとInvalidOperationExceptionが発生する
私の以前のコードでは、働いている:
// Remove unselected features
var removedFeatures = new List<VehicleFeature>();
foreach(var f in v.Features)
if(!vr.Features.Contains(f.FeatureId))
removedFeatures.Add(f);
私はこのようにLINQにそれをリファクタリングする場合:
と、InvalidOperationException:コレクションだった
var removedFeatures=v.Features.Where(f=>!vr.Features.Contains(f.FeatureId)); foreach(var f in removedFeatures) v.Features.Remove(f);
私は以下の例外を取得します変更されました。列挙操作が実行されないことがあります。 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResourceリソース)
私はそれは私のコードは、リストが反復されたときにリストを変更意味を知っているが、私はこのエラーが起こった場所がわからないのですか?
foreach内で同じコレクションを変更することはできません。 foreachの代わりにループを試してみてください。 – Santhosh
しかし、私は反復されたリストを変更しませんでした。私が反復するリストは削除されていますが、私が修正したリストはv –
の削除されたフィーチャーは実際にv.Featuresを参照しています。 removedFeaturesの変更は実際にv.Featuresを変更しています – Santhosh