Одно из возможных решений данной задачи стоится на DI + Generic. Мы можем объявить generic интерфейс, реализующий набор математических операций над указанным типом. Мы можем реализовать данный интерфейс для всех необходимых типов. При этом у нас не будет мест, в которых бы нужно было выполнять приведение типов. С помощью DI регистрируем необходимые реализации и в нужном месте резольвим необходимый. Причем можем так-же внедрить в конструктор к другим классам.
Минусы: - Необходимо реализовывать интерфейс под каждый тип, в том числе для стандартных. При этом мы можем определить кастомные операции для своих типов.
Плюсы: - Мы не выполняем приведение типов, не пытаемся самостоятельно определять реализацию в зависимости от типа. - Также мы теряем скорость выполнения на Expression Tree, по факту работая с нативными операциями через Generic. - В случае, если для указанного типа не будет зарегистрирован класс мат. операций, то мы получим ошибку при разрешении зависимостей.
Более подробный и профессиональный разбор данной темы:
Unsafe generic math in C#
https://habr.com/ru/post/480416/
Одно из возможных решений данной задачи стоится на DI + Generic.
Мы можем объявить generic интерфейс, реализующий набор математических операций над указанным типом.
Мы можем реализовать данный интерфейс для всех необходимых типов. При этом у нас не будет мест, в которых бы нужно было выполнять приведение типов.
С помощью DI регистрируем необходимые реализации и в нужном месте резольвим необходимый. Причем можем так-же внедрить в конструктор к другим классам.
Минусы:
- Необходимо реализовывать интерфейс под каждый тип, в том числе для стандартных. При этом мы можем определить кастомные операции для своих типов.
Плюсы:
- Мы не выполняем приведение типов, не пытаемся самостоятельно определять реализацию в зависимости от типа.
- Также мы теряем скорость выполнения на Expression Tree, по факту работая с нативными операциями через Generic.
- В случае, если для указанного типа не будет зарегистрирован класс мат. операций, то мы получим ошибку при разрешении зависимостей.
AdamWhiteHat / GenericArithmetic
https://github.com/AdamWhiteHat/GenericArithmetic