【问题标题】:How to put a lambda expression in a variable and then pass it to a s/r如何将 lambda 表达式放入变量中,然后将其传递给 s/r
【发布时间】:2016-04-04 08:46:29
【问题描述】:

对不起这个问题:我对 lambda 表达式有点陌生。 我有一个库和一些函数,我想通过它来执行一些操作。因此,我考虑将一些代码放在一个lamba表达式中,将它与一个变量相关联,并让它从库s/r中执行。 简而言之(伪代码):

var1 = { ...code1...};
var2 = { ...code2...};
ExternalFunction(??? var1, ??? var2);


ExternalFunc(??? var1, ???var2)
{
  Console.WriteLine("Executing code 1");
  ???

  Console.WriteLine("Executing code 2");
  ???
}

【问题讨论】:

  • 你的意思是像:Action var1 = () => { ...code1...}; Action var2 = () => { ...code2...}; ExternalFunction(var1, var2);,其中方法被声明为static void ExternalFunc(Action var1, Action var2) { Console.WriteLine("Executing code 1"); var1(); Console.WriteLine("Executing code 2"); var2(); }。这里的类型Action是一个委托类型,其签名为空参数列表,返回类型为void

标签: c# lambda parameter-passing


【解决方案1】:

根据您的代码应该执行的操作,您将需要Action<T1, T2, ...>Func<T1, T2, ...> 类型的参数。但是你不能创建你的方法来运行任意代码,你当然必须提供返回类型和参数。

因此,如果您的代码块返回一个 int 并期望一个字符串,您可以这样写:

Func<string, int> myFunc = x => Convert.ToInt32(x) + 1;

void ExternalFunc(Func<T1, T2> myFunc, T1 param) {
    var myInt = myFunc(param);
}

现在这样称呼它:

ExternalFunc(myFunc, "1");

但是你不能指望这段代码也能运行:

Func<int> myOtherFunc = () => 1;
ExternalFunc(myOtherFunc)

因为myOtherFunc 必须是Func&lt;T1, T2&gt; 类型,而不仅仅是Func&lt;T&gt; 才能传递给ExternalFunc

此外,如果您的代码块不应返回任何内容 (void),请使用 Action&lt;...&gt; 而不是 Func&lt;...&gt;

【讨论】:

    【解决方案2】:

    嗯,这是你的 lambdas 标准文档:

    https://msdn.microsoft.com/en-us/library/bb397687.aspx?f=255&MSPPError=-2147217396

    如果您正在寻找 lambda 的类型推断,它就是 Func。所以你要找的参数文本大概是这样的:

    public void youtExternalFunction(Func<> var1, Func<T, U> var2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多