试图重用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);
}
答案 0 :(得分:7)
LINQ不提供开箱即用的Sum
通用版本,因为语言和运行时(dynamic
之前)不允许要添加的通用(<T>
)值;没有INumber
接口,并且该语言不支持泛型类型(+
)上的运算符(<T>
)。切换到需要Func<T, float>
,Func<T, int>
等的重载 - 或者使用执行包含通用Sum<T>
实现的MiscUtil库,具体为:
public static TSource Sum<TSource>(this IEnumerable<TSource> source);
public static TValue Sum<TSource, TValue>(this IEnumerable<TSource> source,
Func<TSource,TValue> selector);
它通过解析+
运算符,并使用一些烟雾和镜子(使它不慢等)来完成。