Código C # genérico e o operador Plus [duplicado]

Esta pergunta já tem uma resposta aqui:

Existe uma restrição que restringe meu método genérico a tipos numérico 20 respostas

Estou escrevendo uma classe que faz essencialmente o mesmo tipo de cálculo para cada um dos tipos numéricos primitivos em C #. Embora o cálculo real seja mais complexo, pense nele como um método para calcular a média de um número de valores, por exemplo,

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

gora, para oferecer suporte à mesma operação para double, float e talvez outras classes que definem operador + e operator /, meu primeiro pensamento foi simplesmente usar genéricos:

class Calc<T>
{
    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++;
    }
}

Infelizmente, o C # não consegue determinar se T suporta operadores + e / portanto não compila o trecho acima. Meu próximo pensamento foi restringir T a tipos que suportam esses operadores, mas minha pesquisa inicial indica que isso não pode ser feit

Certamente é possível colocar em caixa cada um dos tipos que desejo oferecer suporte em uma classe que implementa uma interface personalizada, por exemplo. IMath e restrinja T a isso, mas esse código será chamado muitas vezes e eu quero evitar sobrecarga de boxe.

xiste uma maneira elegante e eficiente de resolver isso sem duplicação de códig

questionAnswers(4)

yourAnswerToTheQuestion