Codice generico C # e operatore Plus

Sto scrivendo una class che fa essenzialmente lo stesso tipo di calcolo per ciascuno dei tipi numerici primitivi in ​​C #. Anche se il vero calcolo è più complesso, pensalo come un metodo per calcolare la media di un numero di valori, ad es

class Calc { public int Count { get; private set; } public int Total { get; private set; } public int Average { get { return Count / Total; } } public int AddDataPoint(int data) { Total += data; Count++; } } 

Ora per supportare la stessa operazione per il doppio, float e forse altre classi che definiscono operatore + e operatore /, il mio primo pensiero è stato quello di usare semplicemente i generici:

 class Calc { public T Count { get; private set; } public T Total { get; private set; } public T Average { get { return Count / Total; } } public T AddDataPoint(T data) { Total += data; Count++; } } 

Sfortunatamente C # non è in grado di determinare se T supporta gli operatori + e / così non compila lo snippet sopra riportato. Il mio prossimo pensiero è stato quello di vincolare T a tipi che supportano quegli operatori, ma la mia ricerca iniziale indica che questo non può essere fatto.

È certamente ansible boxare ognuno dei tipi che voglio supportare in una class che implementa un’interfaccia personalizzata, ad es. IMath, e limitare T a quello, ma questo codice verrà chiamato un gran numero di volte e voglio evitare il sovraccarico di boxe.

Esiste un modo elegante ed efficiente per risolvere questo problema senza la duplicazione del codice?