2009-09-18 75 views
0

嗯,我有一个叫做Mamamia的对象,里面有一些字符串属性。我创建了这个对象的列表,并用150个项目填充它。FindAll在自定义对象列表中

我想使用List.FindAll但我实际上不知道该怎么做。我已经试过这样:

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

我不知道为什么委托是存在的,我只是试图从互联网上一些其他的代码复制。

在此先感谢!

回答

1

委托人在那里查看您测试的值是否是您要查找的值。对Remove的呼叫看起来令人担忧,因为它正在改变价值 - 当你浏览清单时,这很少是件好事。我想如果它是一个字符串,那么它不是太糟糕,虽然它可能不是你以后的...

什么是涉及的类型,你在找什么?哦,你在使用C#3和/或.NET 3.5吗?这将使它更容易(即使C#3对.NET 2.0意味着你可以使用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 
} 
+0

我使用.NET 3.5,当我运行代码,我得到的错误: 无法隐式转换类型“System.Collections.Generic.List '到'FindMSIProducts.Mamamia 我正在寻找一个Mamamia对象列表中的propertie – 2009-09-18 14:27:16

+1

@Felipe:您的'produto'变量的类型是'List '还是仅仅是'Mamamia'本身?如果你只是想返回一个单一的项目,然后使用'Find'方法而不是'FindAll'。如果您期望返回多个项目,则将'produto'的类型更改为'List '。 – LukeH 2009-09-18 14:44:47

+0

produto是一个Mamamia对象和产品是一个列表这个列表可以有重复的项目,我想返回所有这些 – 2009-09-18 17:03:44

相关问题