Нет немедленного ответа; операторы статичны и не могут быть выражены в ограничениях - а существующие примитивы не реализуют какой-либо конкретный интерфейс (в отличие от IComparable [‹T›], который можно использовать для имитации больше / меньше).
Тем не мение; если вы просто хотите, чтобы он работал, то в .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>; через все методы, что становится беспорядочным.
person
Marc Gravell
schedule
29.09.2008