Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# namevaluctionCollection.Add()中的IndexOutoforGeException错误?_C#_Razor_Asp.net Mvc 5 - Fatal编程技术网

C# namevaluctionCollection.Add()中的IndexOutoforGeException错误?

C# namevaluctionCollection.Add()中的IndexOutoforGeException错误?,c#,razor,asp.net-mvc-5,C#,Razor,Asp.net Mvc 5,我有一个奇怪的例子,当我尝试向应用程序添加数据或对其进行迭代时,偶尔会有一个NameValueCollection实例崩溃。这是一个MVC5应用程序,我在IIS上托管,所讨论的代码是从Razor视图页面(.cshtml)调用的。以下是代码+堆栈跟踪: // 'slides' is a static list of image related data. if (slides != null && slides.Count >= 1) { // Splat! Som

我有一个奇怪的例子,当我尝试向应用程序添加数据或对其进行迭代时,偶尔会有一个NameValueCollection实例崩溃。这是一个MVC5应用程序,我在IIS上托管,所讨论的代码是从Razor视图页面(.cshtml)调用的。以下是代码+堆栈跟踪:

// 'slides' is a static list of image related data.
if (slides != null && slides.Count >= 1)
{
    // Splat!  Sometimes this crashes...
    Model.CustomMetadata.Add("og:image", slides[0].Path);
}
消息:
索引超出了数组的边界

堆栈跟踪:
在System.Collections.ArrayList.Add(对象值)
位于System.Collections.Specialized.NameValueCollection.Add(字符串名称,字符串值)

这里是代码中的另一个地方,我也会有奇怪的、断断续续的行为:

@foreach (var m in Model.CustomMetadata.AllKeys)
{
    // This also seems strange since I am iterating over the keys, but getting IndexOutOfRangeException...
    <meta property="@m" content="@Model.CustomMetadata[m]" />
}
@foreach(Model.CustomMetadata.AllKeys中的var m)
{
//这似乎也很奇怪,因为我正在迭代键,但得到IndexOutOfRangeException。。。
}
当这个问题发生时(间歇地,在每天重新启动IIS服务器之后),我通过在IIS中手动重新启动应用程序来解决它。在那之后,一切正常,直到下一次重启结束


以前是否有人经历过这种情况,或者可能知道罪魁祸首是什么?

您有线程安全问题

NameValueCollection
。可动态调整大小。
可能是您在调整大小时恰好点击了
.Add()
方法。访问
.AllKeys
时也会发生同样的情况


这并不难做到:
一个对服务器的请求试图向集合添加内容,另一个请求试图调整集合的大小


作为替代方案,您可以使用类似或更合适的名称空间集合。

幻灯片从何而来?@haim770“slides”只是包含图像数据的POCO的一个实例。正如您所看到的,我确保它是非空的,并且包含数据(确实如此)?显示更多的代码,特别是在幻灯片定义的地方。路径有值吗?@DetectivePikachu,是的,有值。我不确定这是否是问题所在。此集合是根据请求创建的,这是访问其成员的唯一位置。从集合中不会删除任何内容,只会添加内容,然后进行迭代。添加内容仍然需要调整大小。@A.R.上面,您说过,“'slides'是一个静态列表”。如果您的意思是
slides
在您的类中定义为
private static NameValueCollection slides
,那么线程安全肯定是个问题。@howcheng Model.CustomMetadata是导致异常的NameValueCollection(每个请求构造),slides是POCO类型的静态列表。静态是指在应用程序的生命周期内保持不变。它永远不会被修改。@DetectivePikachu可能是这样,但引发异常的成员没有从多个线程访问。