No hay respuesta inmediata; los operadores son estáticos y no pueden expresarse en restricciones, y las primativas existentes no implementan ninguna interfaz específica (a diferencia de IComparable [<T>] que se puede usar para emular mayor que/menor que).
Sin embargo; si lo que desea que funcione, a continuación, en .NET 3.5 hay algunas opciones ...
He reunido una biblioteca here que permite un acceso eficiente y simple de los operadores con los genéricos - tales como:
T result = Operator.Add(first, second); // implicit <T>; here
Se puede descargar como parte de MiscUtil
Además, en C# 4.0, esto se hace posible a través de dynamic
:
static T Add<T>(T x, T y) {
dynamic dx = x, dy = y;
return dx + dy;
}
También tuve (en un momento) una versión .NET 2.0, pero eso está menos probado. La otra opción es crear una interfaz como
interface ICalc<T>
{
T Add(T,T)()
T Subtract(T,T)()
}
etc, pero entonces usted necesita para pasar una ICalc<T>;
a través de todos los métodos, que se complica.
¿Tiene un ejemplo de donde está intentando para usar esto? No puedo pensar en ninguna parte que sea útil? –
Un método genérico de "suma" sería un ejemplo simple. T Sum (secuencia de IEnumerable ); // donde T tiene el operador '+' –
blackwing
posible duplicado de [Definir un genérico que implementa el operador +] (http://stackoverflow.com/questions/3598341/define-a-generic-that-implements-the-operator) – Timwi