C# LINQSELECT语句。匿名方法返回异常

C# LINQSELECT语句。匿名方法返回异常,c#,linq,task,async-await,C#,Linq,Task,Async Await,在LINQ Select语句中使用匿名方法时,匿名方法是否必须返回值 当我执行以下操作时,不会出现错误: await Task.WhenAll(list.Select(a => doSomething(a))); 但当我这样做时,我会得到一个错误,即无法从用法推断类型参数: 为什么第一个有效而第二个无效 以下是剂量测定法: 是的,传递给Select的函数必须返回一个值,因为Select的目的是将一组值更改为另一组值。这个怎么样: 定义此方法: private async Task DoS

在LINQ Select语句中使用匿名方法时,匿名方法是否必须返回值

当我执行以下操作时,不会出现错误:

await Task.WhenAll(list.Select(a => doSomething(a)));
但当我这样做时,我会得到一个错误,即无法从用法推断类型参数:

为什么第一个有效而第二个无效

以下是剂量测定法:


是的,传递给Select的函数必须返回一个值,因为Select的目的是将一组值更改为另一组值。这个怎么样:

定义此方法:

private async Task DoSomethingLogAndUpdate(string a)
{
     await doSomething(a);
     Log("Log Something");
     UpdateUI();
}
然后做:

await Task.WhenAll(list.Select(a => DoSomethingLogAndUpdate(a)));
或者在不定义单独方法的情况下执行此操作:

await Task.WhenAll(list.Select(async a => {
    await doSomething(a);
    Log("Log Something");
    UpdateUI();
}));

是的,传递给Select的函数必须返回一个值,因为Select的目的是将一组值更改为另一组值。这个怎么样:

定义此方法:

private async Task DoSomethingLogAndUpdate(string a)
{
     await doSomething(a);
     Log("Log Something");
     UpdateUI();
}
然后做:

await Task.WhenAll(list.Select(a => DoSomethingLogAndUpdate(a)));
或者在不定义单独方法的情况下执行此操作:

await Task.WhenAll(list.Select(async a => {
    await doSomething(a);
    Log("Log Something");
    UpdateUI();
}));
在LINQ Select语句中使用匿名方法时,匿名方法是否必须返回值

对。Select方法的签名为:

public IEnumerable<TResult> Select<TSource, TResult>(
    IEnumerable<TSource> source, 
    Func<TSource, TResult> selector)
在LINQ Select语句中使用匿名方法时,匿名方法是否必须返回值

对。Select方法的签名为:

public IEnumerable<TResult> Select<TSource, TResult>(
    IEnumerable<TSource> source, 
    Func<TSource, TResult> selector)

第一个是简单表达式,因此该表达式的类型用作lambda的返回类型

发件人:

表达式位于=>运算符右侧的lambda表达式称为表达式lambda。表达式lambda广泛用于构造表达式树C和visualbasic。表达式lambda返回表达式的结果

重点矿山


但是,您有一个语句lambda,这意味着为了返回值,必须在lambda主体中有一个return语句。

第一个语句是一个简单表达式,因此该表达式的类型用作lambda的返回类型

发件人:

表达式位于=>运算符右侧的lambda表达式称为表达式lambda。表达式lambda广泛用于构造表达式树C和visualbasic。表达式lambda返回表达式的结果

重点矿山


但是,您有一个语句lambda,这意味着为了返回值,必须在lambda主体中有一个return语句。

doSomething的返回类型是什么?doSomething返回什么?注意,在第二种情况下,我希望您得到一个编译时错误,因为它没有返回任何内容……只是添加了doSomethingmethod@JamesJeffery:那么您应该创建lambda表达式async@JamesJeffery当前位置你不太清楚在这种情况下会发生什么。有很多异步资源—例如,在MSDN上查找起点。我现在没有时间找到它们。doSomething的返回类型是什么?doSomething返回什么?注意,在第二种情况下,我希望您得到一个编译时错误,因为它没有返回任何内容……只是添加了doSomethingmethod@JamesJeffery:那么您应该创建lambda表达式async@JamesJeffery当前位置你不太清楚在这种情况下会发生什么。有很多异步资源—例如,在MSDN上查找起点。我现在没有时间找到它们。这将在开始doSomething时写入日志并更新UI,而不是在它完成时。这将起作用,但理想情况下Select语句不应该有这样的副作用。这将在开始doSomething时写入日志并更新UI,而不是在它完成时。这将起作用,但理想情况下,Select语句不应该有这样的副作用。