FindAll在自定义对象列表中

时间:2009-09-18 14:03:59

标签: c# list mscorlib

好吧,我有一个名为Mamamia的对象,里面有一些字符串属性。我创建了一个这个对象的列表,并用150个项目填充它。

我正在尝试使用List.FindAll,但我真的不知道该怎么做。我试过这种方式:

produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue};

我不知道为什么代表在那里,我只是试图从互联网上的其他代码中复制。

提前致谢!

1 个答案:

答案 0 :(得分:1)

代表在那里查看您正在测试的价值是否是您正在寻找的价值。对Remove的调用看起来令人担忧,因为它正在改变价值 - 当你查看列表时,这很少是一件好事。我想如果它是一个字符串然后它不是太糟糕,虽然它可能不是你想要的...

涉及的类型有哪些,您在寻找什么?哦,你在使用C#3和/或.NET 3.5吗?这样会更容易(即使是针对.NET 2.0的C#3也意味着你可以使用lambda表达式而不是匿名方法)。

目前运行代码时发生了什么?如果它没有找到任何东西,可能只是因为你正在测试参考相等性(如果SelectedValue返回object)。

试试这个:

produto = products.FindAll(delegate(Mamamia cv) {
    return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue);
});

编辑:

听起来你只想要一个值,如果你使用的是.NET 3.5,那么首先使用LINQ会更加惯用。我会用:

string selectedText = (string) cmbPackage.SelectedValue;
Mamamia item = products.FirstOrDefault
                  (cv => cv.LocalPackage.Remove(1,21) == selectedText);
if (item != null)
{
    // Found it; otherwise item will be null
}