Общий код 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 этим, но этот код будет вызываться множество раз, и я хочу избежать накладных расходов на бок
Есть ли элегантный и эффективный способ решить эту проблему без дублирования кода?