Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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# 字典<;字符串,布尔?>;错误-集合已修改;枚举操作不能执行_C#_.net - Fatal编程技术网

C# 字典<;字符串,布尔?>;错误-集合已修改;枚举操作不能执行

C# 字典<;字符串,布尔?>;错误-集合已修改;枚举操作不能执行,c#,.net,C#,.net,我正在获取System.InvalidOperationException:集合已修改;枚举操作可能无法执行。以下代码中出现错误 //temporary var for storing column sort orders according to view type Dictionary<string, bool?> tempColumnSortOrders=new Dictionary<string,bool?>(4); //Check for co

我正在获取System.InvalidOperationException:集合已修改;枚举操作可能无法执行。以下代码中出现错误

//temporary var for storing column sort orders according to view type
        Dictionary<string, bool?> tempColumnSortOrders=new Dictionary<string,bool?>(4);
 //Check for column name in col list
        if (tempColumnSortOrders.ContainsKey(fieldToSort))
        {
            //If exists set column sort order to new sort order
            //Set new sort order
            tempColumnSortOrders[fieldToSort] = sortOrder;
            var tempSortOrders = tempColumnSortOrders;
            //remove sort order of other columns
            foreach (var kvp in tempSortOrders)
            {
                //Reset other columns sort other than current column sort
                if (kvp.Key != fieldToSort)
                {
                    tempSortOrders[kvp.Key] = null;
                }
            }
            //Return name of column to sort
            return fieldToSort;
        }
//用于根据视图类型存储列排序顺序的临时变量
Dictionary tempColumnSortOrders=新字典(4);
//检查列列表中的列名
if(临时列排序器。ContainsKey(fieldToSort))
{
//如果存在,将列排序顺序设置为新排序顺序
//设置新的排序顺序
tempColumnSortOrders[fieldToSort]=排序器;
var tempSortOrders=tempColumnSortOrders;
//删除其他列的排序顺序
foreach(临时排序器中的var kvp)
{
//重置当前列排序以外的其他列排序
如果(kvp.Key!=fieldToSort)
{
tempSortOrders[kvp.Key]=null;
}
}
//返回要排序的列的名称
返回字段排序;
}
堆栈跟踪

[InvalidOperationException:集合已修改;枚举操作可能无法执行。]
System.ThrowHelper.ThrowInvalidOperationException(例外资源 resource)+52 System.Collections.Generic.Enumerator.MoveNext()+44 GlaziersCenter.Handlers.GetSiteView.GetColumntSort(Int32 viewType) 在里面 d:\Projects\GlaziersCenter\GlaziersCenter\Handlers\GetSiteViews.ashx.cs:184 GlaziersCenter.Handlers.GetSiteView.ProcessRequest(HttpContext (上下文)在 d:\Projects\GlaziersCenter\GlaziersCenter\Handlers\GetSiteViews.ashx.cs:68 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +341 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+69


foreach
循环中枚举集合时,不能在一段时间内修改该集合。这是因为它可能导致一些意外的行为


请改用常规的
for
循环。

错误是因为在此循环中,您修改了词典临时排序器

foreach (var kvp in tempSortOrders)
        {
            //Reset other columns sort other than current column sort
            if (kvp.Key != fieldToSort)
            {
                tempSortOrders[kvp.Key] = null;
            }
        }

这是因为您正在为每个集合修改

foreach(温度传感器中的var kvp)

临时排序器[kvp.Key]=null

试试这段代码

List<string> keys = new List<string>(tempSortOrders.Keys);
foreach (var key in keys)
{
    //Reset other columns sort other than current column sort
    if (key != fieldToSort)
    {
        tempSortOrders[key] = null;
    }
}
List keys=新列表(tempSortOrders.keys);
foreach(var键入键)
{
//重置当前列排序以外的其他列排序
如果(键!=fieldToSort)
{
tempSortOrders[key]=null;
}
}
更新,


将集合转换为列表将解决此问题。

foreach
循环不允许您迭代的集合发生突变。要更改集合,请使用
for
循环。

枚举集合并对其进行修改在
字典中不受支持。如果您想这样做,可以使用
ConcurrentDictionary
,因为您使用的是单线程

试试这个

foreach (var kvp in tempSortOrders.ToArray())<--Note ToArray here
{
    //Reset other columns sort other than current column sort
    if (kvp.Key != fieldToSort)
    {
        tempSortOrders[kvp.Key] = null;
    }
}

无法将foreach(tempSortOrders.ToArray()中的var kvp)属性或索引器'System.Collections.Generic.KeyValuePair.Value'分配给--它是只读的-我已经尝试过了。只读。。我想您必须使用常规的
for
循环。您不能在foreach中编辑foreach中使用的集合。请使用for循环或尝试我的solution@SriramSakthivel你试过这个吗?请在说“不工作”之前重试。这将导致相同的异常。底层集合仍在修改中,即使您只是在枚举键。这样做是可行的,但创建一个全新的
列表<>
只是为了枚举键,这是非常低效的。@Rik:它只是创建一个全新的
列表
,只使用键。它不会复制整本字典。@ChamikaSandamal是字典。ToArray,这有什么不对?你会复制整本字典。最好使用
键。ToArray