使用委托调用Lambda表达式的语法
本文关键字:表达式 语法 Lambda 调用 | 更新日期: 2023-09-27 18:18:56
我发现下面的例子效果很好:
private static bool GreaterTwo(int arg)
{
return arg > 2;
}
public static void GreaterTwoSample()
{
Enumerable.Range(0, 10).Where(GreaterTwo);
}
在WHERE-Lambda:
中使用GreaterTwo
和另一个参数的语法是什么?private static bool GreaterTwoSmallerArg2(int arg, int arg2)
{
return arg > 2 && arg < arg2;
}
UPDATE:感谢HugoRune的回答,这里是另一个带有2个参数的工作示例
public static void LimitationSample()
{
Enumerable.Range(0, 10).Where(IsBetween(2, 5));
}
private static Func<int, bool> IsBetween(int min, int max)
{
return x => x > min && x < max;
}
您可以尝试如下操作:
public static void GreaterTwoSample(int arg2)
{
Enumerable.Range(0, 10).Where(x=>GreaterTwoSmallerArg2(x, arg2));
}
Enumerable.Range(0, 10).Where(...)
要求函数接受单个int作为参数并返回bool,这是没有办法的
两种常用的方法是:
-
传递现有函数的名称,该函数接受int,即
Enumerable.Range(0, 10).Where(YourFunctionThatTakesAnIntAndReturnsBool);
-
传递lambda表达式
Enumerable.Range(0, 10).Where(x=>{Expression_that_returns_a_bool})
Enumerable.Range(0, 10).Where(x=>GreaterTwoSmallerArg2(x, 5))
但是如果你想要更多的语法糖,你可以创建一个函数来返回一个函数,
private static Func<int,bool> funcGreaterTwoSmallerArg2(int arg2)
{
return x => GreaterTwoSmallerArg2(x, arg2);
// OR: return x => x > 2 && x < arg2;
}
那么你可以这样使用:
Enumerable.Range(0, 10).Where(funcGreaterTwoSmallerArg2(5));
这种语法应该小心使用,它会使源代码难以理解。但是,如果您经常重用某个特定的lambda,或者它特别复杂,那么有时这样做是必要的。
Where<T>
接受一个具有单个T
输入和bool
输出(aka谓词)的委托。要使用具有两个参数的方法,您必须使用lambda对其进行投影:
private static bool GreaterTwoSmallerArg2(int arg, int arg2)
{
return arg > 2 && arg < arg2;
}
public static void GreaterTwoSample()
{
Enumerable.Range(0, 10).Where(i => GreaterTwoSmallerArg2(i, {some other value));
}