Func<T, TResult> 的 Lambda 表达式

Yoi*_*mel 5 .net c# lambda func

我怎样才能将 lambda 表达式写入optionObject.Forms.First(f => f.FormId == formId).MultipleIterationFunc 所以最后我有类似的东西

Func<FormObject, bool> FormID = f => f.formID == passedVal;
Run Code Online (Sandbox Code Playgroud)

然后在第一个表达式上使用它来得到类似的东西

optionObject.Forms.First(FormID).MultipleIteration
Run Code Online (Sandbox Code Playgroud)

我试过

Func<FormObject, PassedVal, bool> FormID => formID == PassedVal;
Run Code Online (Sandbox Code Playgroud)

但没有用。
请注意, lambda 表达式没有任何问题,它工作得很好。我只是想创建一个函数来用函数名称替换表达式,以使代码看起来更短且可维护。

31e*_*384 3

Func<FormData, bool>允许您使用新传递的值重用函数体的一种选择是在类级函数中生成实例:

public static Func<FormObject, bool> CreateFormValidFunc(int validId)
{
    return f => f.formID == validId;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

optionObject.Forms.First(CreateFormValidFunc(passedVal)).MultipleIteration
optionObject.Forms.First(CreateFormValidFunc(2)).MultipleIteration
Run Code Online (Sandbox Code Playgroud)

一个有趣的旁注是int Foo => 0;“表达式主体属性”语法(C# 6.0 的新功能),您的尝试可能已经匹配到足以使错误消息变得混乱。

您可以使用表达式主体方法将验证函数生成器简化为:

public static Func<FormObject, bool> CreateFormValidFunc(int validId) => f => f.formID == validId;
Run Code Online (Sandbox Code Playgroud)