2012-02-14 14 views
5

Ho cercato di riutilizzare Sum ma ha ottenuto questo errore:non permette di risolvere il metodo Sum

cannot resolve method Sum

come posso cambiare la mia sintassi

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

risposta

6

LINQ non fornisce, fuori dalla scatola, una versione generica del Sum, per il motivo che la lingua e il runtime (precedenti a dynamic) non consentono di aggiungere i valori generici generici (<T>); non esiste l'interfaccia INumber e la lingua non supporta gli operatori (+) su tipi generici (<T>). Si passi ad sovraccarichi che prendono Func<T, float>, Func<T, int>, ecc - o utilizzare la libreria MiscUtil che fa includono un generico Sum<T> implementazione, in particolare:

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

che lo fa, risolvendo l'operatore +, e utilizzando alcuni fumo e specchi (in modo che non sia lento, ecc.).

Problemi correlati