在C#中为通用列表的FindAll添加参数

Sco*_*ski 5 c# generics predicate findall

我有一个对象列表,我想用整数参数过滤

List<testObject> objectList = new List<testObject>();

// populate objectList with testObjects

objectList.FindAll(GroupLevel0);

private static bool GroupLevel0(testObject item)
{ return item._groupLevel == 0; }

private class testObject
{
     public string _FieldSQL = null;
     public int _groupLevel;
}
Run Code Online (Sandbox Code Playgroud)

我要做的是让GroupLevel0接受一个整数作为参数而不是硬编码为0.我在.NET 2.0中工作,所以lambda表达式是不行的.甚至可以将参数传递给谓词吗?

谢谢,

Jon*_*eet 7

如果您坚持使用C#2.0,请使用匿名方法 - 只是略微笨拙的lambda表达式(忽略表达式树):

List<testObject> objectList = new List<testObject>();
int desiredGroupLevel = 10;

objectList.FindAll(delegate (testObject item)
{
    return item._groupLevel == desiredGroupLevel;
});
Run Code Online (Sandbox Code Playgroud)

或者您仍然可以使用方法调用来开始:

List<testObject> objectList = new List<testObject>();
int desiredGroupLevel = 10;

objectList.FindAll(CheckGroupLevel(desiredGroupLevel));

...

public Predicate<testItem> CheckGroupLevel(int level)
{
    return delegate (testItem item)
    {
        return item._groupLevel == level;
    };
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用的是Visual Studio 2008但是 .NET 2.0为目标,则仍然可以使用lambda表达式.它只是一个编译技巧,不需要框架支持(同样,忽略表达式树).