我在winform上有一个包含几百个项目的列表框。我想删除所有那些带有" color"在它。
例如,这里列出了我的列表框中的一些项目:
[0]Weight
[1]Height
[2]Eye Color
[3]Hair Color
[4]Discoloration
[5]Type
因此,[2] [3] [4]
将从此列表框中删除。 (不区分大小写)
if (listbox.Items.Contains(//like %color%)
//remove items
到目前为止我的代码:
//From multiple sources
foreach (string line in sometextfiles)
{
lstNames.Items.Add(line)
}
foreach (string line in othertextfiles)
{
if (!lstNames.Items.Contains(line))
lstNames.Items.Add(line)
}
foreach (string line in moretextfiles)
{
if (!lstNames.Items.Contains(line))
lstNames.Items.Add(line)
}
foreach (string line in evenmoretextfiles)
{
if (!lstNames.Items.Contains(line))
lstNames.Items.Add(line)
}
//Finally I want to remove unwanted items
var query = (from x in lstNames.Items
where x.Contains("color")
select x);
答案 0 :(得分:4)
您可以将LINQ与ListBox.Items
一起使用,但必须首先投射Items
。试试这个:
listBox.Items.Cast<object>()
.Where(x => x.ToString().IndexOf("color", StringComparison.CurrentCultureIgnoreCase) >= 0)
.ToList()
.ForEach(x => listBox.Items.Remove(x));
根据您向ListBox添加项目的方式,您可以将其替换为Cast<string>()
并删除ToString()
。
答案 1 :(得分:2)
ListBox.Items.RemoveWhere(x => ((MyType)x).stringComponent.Contains("color"));
或
ListBox.Items.ToList<MyType>().RemoveWhere(x => x.stringComponent.Contains("color"));
你需要告诉x它是什么类型。
看起来你需要删除其中的扩展方法。
public static void RemoveWhere<T>(this IList<T> source, Func<T, bool> predicate)
{
for (int i = 0; i < source.Count; i++)
{
if (predicate(source[i]))
{
source.Remove(source[i]);
i--;
}
}
}