2012-06-22 28 views
6

código ficticio:donde es op_addition en [int, float, double]

public object Addition(object a, object b) 
{ 
    var type = a.GetType(); 
    var op = type.GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public); 
    return op.Invoke(null, new object[] { a, b }); 
} 

Este método se queja con int/flotador/doble, que no se pueden encontrar estos métodos (op_Addition).

Entonces, ¿cómo crear un método general de adición?

+2

Puede hacer esto con 'dynamic', si tiene .net 4 disponible. – phg

Respuesta

8

Sí, no son operadores personalizados que existen como miembros así; en su lugar, hay instrucciones incorporadas de IL.

(Lo mismo es casi cierto para la concatenación de cadenas, excepto que el compilador de C# construye una llamada a string.Concat.)

Si estás usando C# 4 y .NET 4, lo más sencillo es utilizar tipado dinámico:

public dynamic Addition(dynamic x, dynamic y) 
{ 
    return x + y; 
} 

para versiones anteriores, que necesita para casos especiales determinados tipos :(

no está claro cuál es su contexto es, pero usted puede encontrar Marc Gravell de article on generic operators interesante.

+0

Gracias @jon, estoy usando la versión mono, creo que debería lanzar [int, double] para flotar primero con estos tipos. – Vontio

+0

@ Sam4Ever: versiones recientes de tipeo dinámico de soporte mono, creo ... –

Cuestiones relacionadas