2012-02-14 126 views
5

试图重用Sum,但得到这个错误:无法解决方法琛

cannot resolve method 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); 
     } 

回答

6

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

它确实通过拆分+操作,并使用一些烟雾和镜子(所以它不慢等)。