我有以下变量
public IEnumerable<SelectListItem> SelectedGroups { get; set; }
Dictionary<string,string> grpsList;
以下是我的迭代
if(condition)
viemodel.SelectedGroups = selectlist1;
else
viemodel.SelectedGroups = selectlist2;
foreach (var item in viemodel.SelectedGroups) <<--Error message
grpsList.Remove(item.Value);
我没有修改选定的组,而是使用它作为参考从grpsList中删除但是它在foreach声明中失败。
添加了代码, selectlist1包含对grpsList的引用,类似这样(删除了其他连接和所有其他代码)
from g in grpsList
select g).ToSelectList(g => g.Value, g => g.Key);
selectlist2是不同的列表。
答案 0 :(得分:3)
您可以尝试使用
foreach (var item in viemodel.SelectedGroups.ToList<SelectListItem>())
{
grpsList.Remove(item.Value);
}
答案 1 :(得分:2)
最有可能SelectedGroups
指向涉及grpsList
的linq表达式。
要避免此问题,请在.ToList()
的分配之前执行SelectedGroups
。 (您仍然可以将属性签名保留为IEnumerable<SelectListItem>
)
使用您添加的代码:
from g in grpsList
select g).ToSelectList(g => g.Value, g => g.Key).ToList(); <-- here
请注意,如果您没有对linq表达式执行ToList()
,那么每次迭代枚举器时都会评估完整的linq语句。这可能会导致许多不必要的性能问题。