直接调用lambda表达式? (例如Action.Invoke(()=> {})

时间:2015-11-13 14:52:46

标签: c# .net .net-3.5 action

抱歉标题不好。我想在.NET 3.5中执行以下操作:

void Invoke(Action callback)
{
   callback();
}

但我想知道是否有一些已经内置的类已经具备此功能。例如,如果我能做到以下几点,我会很高兴(但我知道我不能):

Action.Run(()=>{}}

我知道有很多解决这个问题的方法,比如编写我自己的帮助类或扩展。但正如我所说的那样,我想知道如果没有任何这种情况可以做到这一点。

澄清:

我想要这个解决方案,因为我有一个像这样的方法定义:

private void HelloWorld(Action callback)
{
#if DOTNET4.0+ //This code won't be compiled for DOTNET3.5
   Action.Run(async ()=>{
      await someTask;
      callback();
   });
#else //This code will be
   callback();
#endif
}

我不想使用Task.Run(...)的原因是因为我想最小化依赖于.NET4.0 +的代码量。如果没有替代Task.Run(...),那么我将继续使用它。

1 个答案:

答案 0 :(得分:1)

嗯,没有参数的void lambda可以这样调用:

((Action)(()=>{}))()

((Action)(()=>{})).Invoke()

在允许使用lambda之前,你总是需要为lambda指定一个类型(甚至是隐式)。