无法解析方法Sum
本文关键字:方法 Sum | 更新日期: 2023-09-27 18:24:19
尝试重用Sum
,但出现以下错误:
无法解析方法Sum
我如何更改我的语法
private static void AggregatesData(User user)
{
user.TotalActiveUsers = SumToolbarsData(user.bars,(tb => tb.ActiveUsers));
user.TotalInstalls = SumToolbarsData(user.bars, (tb => tb.Installs));
user.TotalBalance = SumToolbarsData(user.bars, (tb => tb.Balance));
}
private static T SumToolbarsData<T>(List<Bar> bars, Func<Bar, T> selector)
{
return bars.Sum<T>(selector);
}
LINQ不提供开箱即用的Sum
的通用版本,原因是语言和运行时(dynamic
之前)不允许添加通用(<T>
)值;没有INumber
接口,并且该语言不支持泛型类型(<T>
)上的运算符(+
)。切换到采用Func<T, float>
、Func<T, int>
等的重载,或者使用MiscUtil库,确实包含通用Sum<T>
实现,特别是:
public static TSource Sum<TSource>(this IEnumerable<TSource> source);
public static TValue Sum<TSource, TValue>(this IEnumerable<TSource> source,
Func<TSource,TValue> selector);
它通过解析+
算子,并使用一些烟雾和镜子(这样它就不会变慢,等等)来实现这一点。