Listbox.Contains with" Like"操作者

时间:2014-04-29 19:57:47

标签: c# winforms

我在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);

2 个答案:

答案 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--;
            }
        }
    }