2012-02-14 125 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); 

它確實通過拆分+操作,並使用一些煙霧和鏡子(所以它不慢等)。