Общий код C # и оператор «Плюс» [дубликаты]

На этот вопрос уже есть ответ:

Есть ли ограничение, ограничивающее мой универсальный метод числовыми типами? 20 ответов

Я пишу класс, который выполняет по сути одинаковые вычисления для каждого из примитивных числовых типов в C #. Хотя реальный расчет является более сложным, подумайте о нем как о методе вычисления среднего числа значений, например

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

Теперь, чтобы поддержать ту же самую операцию для классов double, float и, возможно, других классов, которые определяют operator + и operator /, моей первой мыслью было просто использовать дженерики:

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

К сожалению, C # не может определить, поддерживает ли T операторы + и / или не компилирует приведенный выше фрагмент. Моей следующей мыслью было ограничить T типами, которые поддерживают эти операторы, но мое первоначальное исследование показало, что это невозможно сделать.

Конечно, можно включить каждый из типов, которые я хочу поддерживать, в классе, который реализует пользовательский интерфейс, например IMath и ограничьте T этим, но этот код будет вызываться множество раз, и я хочу избежать накладных расходов на бок

Есть ли элегантный и эффективный способ решить эту проблему без дублирования кода?

Ответы на вопрос(4)

Ваш ответ на вопрос