【发布时间】:2012-12-14 09:07:29
【问题描述】:
我试图在我的 ASP.NET MVC 4 应用程序中查找以下错误的来源。
Exception type: System.InvalidOperationException
Exception message: Collection was modified; enumeration operation may not execute
Stack trace: at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at System.Web.Mvc.MvcHandler.RemoveOptionalRoutingParameters()
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
问题是我有一个 Collection 正在迭代的所有(少数)地方我没有以任何方式更改 Collection 结构。堆栈跟踪没有太大帮助,因为它不包含对我的代码的任何引用。
我已经阅读了很多关于这个主题的帖子,基本上这就是他们提到的解决方案。 有人知道此类问题的其他解决方案吗?有关如何获取有关错误的更多信息的任何提示?
【问题讨论】:
-
把你的代码放在这里,告诉你尝试了什么?
-
您是否正在运行任何可能会更改值的后台线程?
-
您必须发布代码——最有可能的原因是修改了闭包,或者延迟了 IEnumerable 枚举。
-
看起来您在
Dictionary上调用ToArray而其他东西 正在修改字典在ToArray调用.可能的线程问题。 -
我倾向于同意@Rawling 这条线
RemoveOptionalRoutingParameters确实指出了这一点。可能有一些我有的路线......
标签: c# asp.net-mvc collections error-handling