无法解析方法Sum

时间:2012-02-14 07:21:55

标签: c# linq

试图重用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);
        }

1 个答案:

答案 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);

它通过解析+运算符,并使用一些烟雾和镜子(使它不慢等)来完成。