0

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

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

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

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

提前致谢!

4

1 回答 1

1

代表在那里查看您正在测试的值是否是您正在寻找的值。令人担忧的是,调用 toRemove看起来像是在改变值 - 当您查看列表时,这很少是一件好事。我想如果它是一个字符串那么它还不错,虽然它可能不是你所追求的......

涉及哪些类型,您在寻找什么?哦,您使用的是 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
}
于 2009-09-18T14:07:07.903 回答