直接调用lambda表达式? (例如 Action.Invoke(()=>{})
Calling lambda expression directly? (Ex. Action.Invoke(()=>{})
抱歉标题不好。我想在 .NET 3.5 中执行以下操作:
void Invoke(Action callback)
{
callback();
}
但我想知道是否已经有一些 built-in class 具有此功能。例如,如果我能做到以下几点我会很高兴(但我知道我做不到):
Action.Run(()=>{}}
我知道这个问题有很多解决方案,比如编写我自己的助手 class 或扩展。但正如我所说,我想知道如果没有这些是否可行。
澄清:
我想要这个解决方案,因为我有一个这样的方法定义:
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(...)别无选择,那我就去吧。
好吧,一个没有参数的 void lambda 可以这样调用:
((Action)(()=>{}))()
或
((Action)(()=>{})).Invoke()
在允许使用它之前,您始终必须为 lambda 分配一个类型(甚至是隐式的)。
抱歉标题不好。我想在 .NET 3.5 中执行以下操作:
void Invoke(Action callback)
{
callback();
}
但我想知道是否已经有一些 built-in class 具有此功能。例如,如果我能做到以下几点我会很高兴(但我知道我做不到):
Action.Run(()=>{}}
我知道这个问题有很多解决方案,比如编写我自己的助手 class 或扩展。但正如我所说,我想知道如果没有这些是否可行。
澄清:
我想要这个解决方案,因为我有一个这样的方法定义:
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(...)别无选择,那我就去吧。
好吧,一个没有参数的 void lambda 可以这样调用:
((Action)(()=>{}))()
或
((Action)(()=>{})).Invoke()
在允许使用它之前,您始终必须为 lambda 分配一个类型(甚至是隐式的)。