.NET 7 通用数学不支持 Linq 方法 Sum?

Bor*_*ink 6 .net c# linq .net-7.0

我有以下代码,但它无法在 Visual Studio 17.4 预览版 2.1 和 .NET 7 RC1 SDK 中编译:

using System.Numerics;

int averageInt = Average<int, int>(1, 5, 10);
Console.WriteLine(averageInt);

double averageDouble = Average<int, double>(1, 5, 10);
Console.WriteLine(averageDouble);

TResult Average<TInput, TResult>(params TInput[] numbers)
    where TInput : INumber<TInput>
    where TResult : INumber<TResult> => numbers.Sum() / TResult.CreateChecked(numbers.Length);
Run Code Online (Sandbox Code Playgroud)

我得到的编译器错误是: Error CS1929 'TInput[]' does not contain a definition for 'Sum' and the best extension method overload 'Queryable.Sum(IQueryable<decimal>)' requires a receiver of type 'IQueryable<decimal>'

我尝试了以下方法作为替代方案,但它也无法编译:

using System.Numerics;

int averageInt = Average<int, int>(1, 5, 10);
Console.WriteLine(averageInt);

double averageDouble = Average<int, double>(1, 5, 10);
Console.WriteLine(averageDouble);

TResult Average<TInput, TResult>(params TInput[] numbers)
    where TInput : INumber<TInput>
    where TResult : INumber<TResult> => numbers.AsQueryable().Sum() / TResult.CreateChecked(numbers.Length);
Run Code Online (Sandbox Code Playgroud)

出现错误: Error CS1929 'IQueryable<TInput>' does not contain a definition for 'Sum' and the best extension method overload 'Queryable.Sum(IQueryable<decimal>)' requires a receiver of type 'IQueryable<decimal>'

我在这里缺少什么?

Gur*_*ron 5

ATM 没有超载Enumerable.Sum(如MaxMin)利用通用数学。现在你可以使用以下方法解决Enumerable.Aggregate

TResult Average<TInput, TResult>(params TInput[] numbers)
    where TInput : INumber<TInput>
    where TResult : INumber<TResult> 
    => numbers.Aggregate(TResult.Zero, (agg, t) => agg + TResult.CreateChecked(t)) 
          / TResult.CreateChecked(numbers.Length);
Run Code Online (Sandbox Code Playgroud)

相同的方法可以用于其他类似的操作。

如需内置支持 - 监控此 github问题。