我正在努力用this answer采用的异步扩展方法来围绕类型推断进行研究。
public static class EnumerableExtensions
{
public static async Task<IEnumerable<T1>> SelectAsync<T, T1>(
this IEnumerable<T> enumeration,
Func<T, Task<T1>> func)
{
return await Task.WhenAll(enumeration.Select(func));
}
public static async Task<IEnumerable<T1>> SelectManyAsync<T, T1>(
this IEnumerable<T> enumeration,
Func<T, Task<IEnumerable<T1>>> func)
{
return (await enumeration.SelectAsync(func)).SelectMany(x => x);
}
}
我正在使用以下扩展方法:
var allChildren = await parents.SelectManyAsync(parent => ReturnsChildrenAsync(parent));
parents
的类型为IList<Parent>
ReturnsChildrenAsync()
返回一个Task<IList<Child>>
但是我遇到以下错误:
无法从用法中推断出方法'EnumerableExtensions.SelectManyAsync
(IEnumerable ,Func >>)'的类型参数。尝试显式指定类型参数。
似乎无法推断出T1
。为什么不能从Task<IList<Child>>
派生出来?