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

あなたはで試すことができます

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

ほとんどSelectedGroupsの場合、を含むlinq式を指しますgrpsList。この問題を回避する.ToList()には、に割り当てる前にを実行しSelectedGroupsます。(プロパティの署名は引き続き保持できますIEnumerable<SelectListItem>

追加したコードの使用:

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

ToList()列挙子を反復処理するたびよりもlinq式でonを実行しない場合、完全なlinqステートメントが評価されることに注意してください。これにより、多くの不要なパフォーマンスの問題が発生する可能性があります。

于 2012-09-17T17:22:33.397 に答える