2012-02-14 33 views
5

Cố gắng để tái sử dụng Sum nhưng đã nhận lỗi này:không thể giải quyết phương pháp Sum

cannot resolve method Sum

làm thế nào tôi có thể thay đổi cú pháp của tôi

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

Trả lời

6

LINQ không cung cấp, ra khỏi hộp, một phiên bản chung của Sum, vì lý do ngôn ngữ và thời gian chạy (trước dynamic) không cho phép giá trị chung (<T>) được thêm vào; không có giao diện INumber và ngôn ngữ không hỗ trợ toán tử (+) trên các loại chung (<T>). Hoặc chuyển sang quá tải mà mất Func<T, float>, Func<T, int>, vv - hoặc sử dụng thư viện MiscUtilkhông bao gồm một generic Sum<T> thực hiện, cụ thể:

public static TSource Sum<TSource>(this IEnumerable<TSource> source); 
public static TValue Sum<TSource, TValue>(this IEnumerable<TSource> source, 
         Func<TSource,TValue> selector); 

mà nó bằng cách giải quyết các nhà điều hành +, và sử dụng một số khói và gương (để nó không phải là chậm, vv).

Các vấn đề liên quan