2012-03-27 94 views
3

最近このエラーが発生しており、コレクションを変更していない理由がわからない場合、エラーが発生したページでforeachをほとんど削除しました。以下はエラーのスタックトレースです:コレクションが変更されました。列挙操作が実行されない可能性があります

Exception type: InvalidOperationException 
    Exception message: Collection was modified; enumeration operation may not execute. 
    en System.Collections.Generic.List`1.Enumerator.MoveNextRare() 
    en System.Linq.Enumerable.WhereListIterator`1.MoveNext() 
    en System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() 
    en System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    en System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() 
    en System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    en System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() 
    en System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    en System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext() 
    en System.Web.Mvc.FilterProviderCollection.<RemoveDuplicates>d__b.MoveNext() 
    en System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    en System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext() 
    en System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    en System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    en System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    en System.Web.Mvc.FilterInfo..ctor(IEnumerable`1 filters) 
    en System.Web.Mvc.ControllerActionInvoker.GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) 
    en System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
    en System.Web.Mvc.Controller.ExecuteCore() 
    en System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    en System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5() 
    en System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    en System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d() 
    en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    en System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

何か助けていただければ幸いです。

+3

この例外が発生するコードを特定して投稿してください。 foreachブロックではなく、linqクエリで発生します。 – phoog

+1

これは重複しているとは言いません。ここでの問題は、MVC4のバグの結果です。 MVC4バグの根底にある原因は、リンクされた質問と重複している可能性がありますが、その質問によって提供される回答はこの問題を解決しません。 @ RyanVersawの答え(MVC5へのアップグレード)は、ここでより直接的に適用されるようです。 –

答えて

0

リストインスタンシエーションのコードがあれば、さらに役立ちます。

現実的には、リストコンストラクタに渡す列挙体が変更されていないことを確認します。 IEnumerableを使用すると、その時点で列挙型を生成しますが、IQueryableでは、制御点まで列挙型の生成を延期できます。

私には、IEnumerableを生成しているようですが、リストコンストラクタに渡すためには、ソースリストを変更する前に行います。

5

私はこの問題が私たちのためにポップアップしているのを見ているので、私は掘り下げました。これは、スタックトレースに基づいてMVC内で深く起こっていることは明らかですが、それはMVC 5 should fix thisのように見えます。左側のバージョンはMVC4で、右側のバージョンはこの時点でのMVC5の現在のバージョンです。 RemoveDuplicates()メソッドをチェックアウトした場合、表示されているような例外を防ぐために変更されているようです。

関連する問題