0

Generic Listリピーター コントロールにバインドされているアイテムを から削除しようとしています。

これまでのところ、(インターウェブを精査した後)動作するはずの remove メソッドがあります。

Label lblMemberName = (Label)e.Item.FindControl("lblMemberName");        

switch (e.CommandName)
{
    case "RemoveMember":
        foreach (challenge.Member member in Members.Where(member => member.Name == lblMemberName.Text))
        {
            //This line doesnt work
            Members.Remove(member);
        }
        break;
}

残念ながら、このシナリオ以外の実際の削除は機能していません。

new削除する のインスタンスを作成できないことを理解していますList<>。そのため、Linqステートメントを使用して以前の詳細を見つけました。

私は何を間違っていますか?どうすればそれを修正できますか?

4

3 に答える 3

3

上記のように、反復処理中にコレクションの内容を変更することはできません。

List(T).RemoveAll()を試すこともできます。LINQ: How to Use RemoveAll with For loop with Array を参照してください。これは、別のリストよりも簡潔なソリューションです。

于 2012-11-01T08:48:24.020 に答える
0

メンバーを取得します。

var member = Members.FirstOrDefault(i=>i.Name.Equals(thename));

そして、それをリストから削除します。

if (member != null) 
{ 
    Members.Remove(member); 
}
于 2012-11-01T09:22:01.727 に答える
0

foreach しているリストを変更することは違法です。ただし、foreach の代わりに for ループに変換してから変更することはできます。

for (int i=0; i < Members.Count; i++)
{
    if (Members[i].Name == lblMemberName.Text)
        Members.RemoveAt(i--); // decrement because we just shrunk the list)
}
于 2012-11-01T08:50:17.400 に答える