1

次のように、チェックボックスリストの選択された項目から文字列型の IEnumerable があります。

var list1 = chkboxlist.Items.Cast<ListItem>().Where(item => item.Selected == true).Select(item => item.Value);

if (list1.Contains("4"))
{
    //then remove that item from the list like

    for (int i = list1.Count() - 1; i >= 0; i--)
    {
        if (list1.ElementAt(i) == "4") list1.ToList().RemoveAt(i);
    }
}

しかし、アイテムはまだそのリストに存在します。削除されていません。

4

2 に答える 2

7

シーケンスのコピーである新しいToList()リストを作成する呼び出しを行ってから、そのリストからそれを削除しています...しかし、基本的にはリストを破棄しています。

元のシーケンスをリストに変換してから、不要な値削除する必要があります...または、次のように使用することもできますExcept:

var list1 = chkboxlist.Items
                      .Cast<ListItem>()
                      .Where(item => item.Selected)
                      .Select(item => item.Value)
                      .Except(new[] { "4" });
于 2013-04-01T19:06:26.667 に答える
3

前もって列挙をリストにすると、項目を削除できます。

var list1 = chkboxlist.Items.Cast<ListItem>()
                      .Where(item => item.Selected == true)
                      .Select(item => item.Value)
                      .ToList();

そうは言っても、最初にアイテムを除外することができます:

var list1 = chkboxlist.Items.Cast<ListItem>()
                      .Where(item => item.Selected == true && item.Value != "4")
                      .Select(item => item.Value)
                      .ToList();
于 2013-04-01T19:06:35.753 に答える