Нет немедленного ответа; операторы являются статическими и не могут быть выражены в ограничениях - а существующие примитивы не реализуют какой-либо конкретный интерфейс (в отличие от IComparable [], который можно использовать для эмуляции больше / меньше чем).
Тем не менее, если вы просто хотите, чтобы это работало, то в .NET 3.5 есть несколько вариантов ...
Я собрал библиотеку здесь , которая обеспечивает эффективный и простой доступ к операторам с обобщениями - такими как:
T result = Operator.Add(first, second); // implicit <T>; here
Может быть загружен как часть MiscUtil
Кроме того, в C # 4.0 это становится возможным через dynamic
:
static T Add<T>(T x, T y) {
dynamic dx = x, dy = y;
return dx + dy;
}
У меня также была (в какой-то момент) версия .NET 2.0, но она менее проверена. Другой вариант - создать интерфейс, такой как
interface ICalc<T>
{
T Add(T,T)()
T Subtract(T,T)()
}
и т. Д., Но затем вам нужно пропустить ICalc<T>;
через все методы, что приводит к путанице.