我有以下代碼,但它不能在 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);
我得到的編譯器錯誤是:
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);
出現錯誤:
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>'
我在這里想念什么?
uj5u.com熱心網友回復:
ATM 沒有過載Enumerable.Sum(如Max等Min)利用通用數學。現在您可以使用以下方法解決Enumerable.Aggregate:
TResult Average<TInput, TResult>(params TInput[] numbers)
where TInput : INumber<TInput>
where TResult : INumber<TResult> => TResult.CreateChecked(numbers.Aggregate(TInput.Zero, (agg, t) => agg t)) / TResult.CreateChecked(numbers.Length);
相同的方法可以用于其他類似的操作。
對于內置支持 - 監控這個 github問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515644.html
