如何编写没有Lambda表达式的Func函数?

4
我正在思考如何将这个代码转换为非 Lambda 表达式: List.Where(X=>X>5); 我无法想出如何在此处使用 Func。

你为什么想要那个? - Nicolas Pierre
只是想知道如何做,没有别的 :) 我开始忘记东西了.. - John V
你可以编写一个接受一个输入类型参数并返回 bool 的方法。 - dkozl
2个回答

12

有两种相对简单的方法可以创建委托,而不使用lambda表达式:

  • 编写一个方法并使用方法组转换

    private static bool GreaterThan5(int x)
    {
        return x > 5;
    }
    
    ...
    
    var query = list.Where(GreaterThan5);
    
  • 使用匿名方法

  • var query = list.Where(delegate(int x) { return x > 5; });
    

然而,与使用lambda表达式相比,这两种方法都不够清晰。对于更复杂的例子,当您需要捕获局部变量时,"编写单独的方法"版本将变得更加复杂。


3

虽然我不理解这个的目的,但你可以像这样做:

bool MyFilterFunction(int x)
{
    return x > 5;
}

然后重写你的代码:
List.Where(MyFilterFunction);

是的,但我在考虑没有“外部”委托的匿名函数。 - John V
@Jon Skeet已经回答了这个问题。我无法说得更好 =)。只是要补充一点,使用lambda中的局部变量不仅会变得更加复杂,而且完全浪费时间,因此您应该尽可能使用lambda。 - Sasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接