【发布时间】:2018-05-31 08:33:39
【问题描述】:
我想创建一个 lambda 表达式并立即调用它,我想避免创建委托;一个简单的例子1:
int i = (() => 42)();
这会产生错误:
CS0149 需要方法名称
有两种解决方法:
-
声明一个(本地)方法:
int Return42() => 42; int i = Return42(); -
创建委托:
int i = ((Func<int>)(() => 42))();
是否可以在不创建委托且不命名委托的情况下创建并立即调用 lambda 表达式?如果可能的话,如何创建这样的 lambda?
1.实际上,我想使用async Task 而不是Task.ContinueWith(我试图按照Stephen Cleary 所说的:@987654323 @);例如:
Task<int> future = (async () =>
(await RetrieveLookupFromFarAway())["42"].First())();
RetrieveLookupFromFarAway 类似:
async Task<ILookup<string, int>> RetrieveLookupFromFarAway()
{
await Task.Delay(1000);
return Enumerable.Empty<int>().ToLookup((x) => x.ToString());
}
【问题讨论】:
-
问题是
() => 42可以同时是Func和Expression。这就是您不能使用var将其分配给变量的原因。 -
@HimBromBeere:或者完全不同的委托类型。