【问题标题】:Pass a lambda expression as a parameter, then execute that lambda with a parameter将 lambda 表达式作为参数传递,然后使用参数执行该 lambda
【发布时间】:2019-12-03 16:38:14
【问题描述】:

假设我有以下(不正确的)代码;

public void Foo()
{
    bool retVal = Bar(x => x.Any(y => y.Contains(z)); // Where z is "my variable" (below)
}

public bool Bar(Func<List<MyObject>, bool> pFunc)
{
    return pFunc("a variable");
}

如何使用仅存在于 Bar() 中的附加变量传递在对 Bar 的调用中编写的 lambda 表达式,以便在 Bar 中执行它?

代码不必如此简单。

【问题讨论】:

  • 将 y.Contains(z) 更改为 y==z
  • 什么是zpFunc 需要第二个参数:public bool Bar(Func&lt;List&lt;MyObject&gt;, TypeOfZ, bool&gt; pFunc);。而且电话也很可疑,我希望像return pFunc(aListOfMyObjects, z);

标签: c# winforms methods lambda


【解决方案1】:

你可以在 lambda 中有两个输入:(x,z)

public void Foo()
{
    bool retVal = Bar((x,z) => x.Any(y => y.Contains(z))); // Where z is "my variable" (below)
}

public bool Bar(List<MyObject> list, Func<List<MyObject>, string, bool> pFunc)
{
    return pFunc(list, "a variable");
}

这意味着您还必须将 Func 签名更新为 Func&lt;List&lt;MyObject&gt;, string, bool&gt; 以反映 (x,z)=&gt;bool

我还更新了 Bar 签名以提供输入列表,因为它丢失了。也许它是一个局部变量或类成员。无论如何,您应该能够从这里开始调整您的代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多