我需要知道是否有办法动态创建这个部分。或者,它甚至可能吗?使用“Contians”在这种情况下不起作用。
(x.Letter!= "a") && (x.Letter!= "b") && (x.Letter!= "e")
“a”,“b”,“c”将使用for循环从ListBox生成。列表框中可以有任意数量的项目。这就是为什么这必须是动态的。
MyList.RemoveAll(x => (x.Letter != "a") && (x.Letter!= "b") && (x.Letter!= "e"));
答案 0 :(得分:3)
您正在尝试确保该列表中的任何内容都不等于x.Letter
,因此我要构建您要先删除的值列表,然后使用该列表
我不知道你的ListBox
是什么样的,但是我们假设你可以像这样从中获取字符串列表:
List<string> stuffToRemove = myListBox.Items.Select(x => x.Value).ToList();
您应该能够在LINQ语句中使用该字符串列表:
MyList.RemoveAll(x => stuffToRemove.Contains(x.Letter));
如果您确实打算保留 ListBox
中的内容,请相应地进行调整:
List<string> stuffToKeep = myListBox.Items.Select(x => x.Value).ToList();
MyList.RemoveAll(x => !stuffToKeep.Contains(x.Letter));
答案 1 :(得分:1)
您不需要将其设置为动态,因为您的条件结构非常规则:您检查对所有项目的遏制。因此你可以这样做:
var check = new List<string>(itemsFromListBox);
MyList.RemoveAll(x => check.All(s => x.Letter != s));