0

我有以下变量

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);

我没有修改 selectedgroups 而是将其用作从 grpsList 中删除的参考,但它在 foreach 声明中失败。


添加了代码,selectlist1 包含对 grpsList 的引用,类似这样(删除了附加连接和所有其他代码)

from g in grpsList
select g).ToSelectList(g => g.Value, g => g.Key);

selectlist2 是不同的列表。

4

2 回答 2

2

最有可能SelectedGroups指向一个涉及grpsList. 为避免此问题,请.ToList()在分配到SelectedGroups. (您仍然可以将属性签名保留为IEnumerable<SelectListItem>

使用您添加的代码:

from g in grpsList
select g).ToSelectList(g => g.Value, g => g.Key).ToList(); <-- here

请注意,如果您不执行ToList()linq 表达式,则每次迭代 Enumerator 时都会评估完整的 linq 语句。这可能会导致许多不必要的性能问题。

于 2012-09-17T17:22:33.397 回答
2

你可以试试

foreach (var item in viemodel.SelectedGroups.ToList<SelectListItem>()) 
{
       grpsList.Remove(item.Value);
}
于 2012-09-17T17:24:16.413 回答