2012-06-22 14 views
6

codice fittizio:dove è op_addition in [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 }); 
} 

Questo metodo si lamenta con int/float/double, che non riesce a trovare questi metodi (op_Addition).

Quindi, come creare un metodo di aggiunta generale?

+2

Si può fare ciò con 'dynamic', se si dispone di .net 4 disponibile. – phg

risposta

8

Sì, non sono operatori personalizzati che esistono come membri come questo - ci sono invece istruzioni IL incorporate.

(Lo stesso è quasi vero per concatenazione di stringhe, se prima non sia il compilatore C# costruisce una chiamata a string.Concat.)

Se stai usando C# 4 e .NET 4, l'approccio più semplice è quello di utilizzare tipizzazione dinamica:

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

per le versioni precedenti, è necessario per casi speciali certi tipi :(

non è chiaro che cosa il vostro contesto è, ma si possono trovare Marc Gravell di article on generic operators interessante.

+0

Grazie @ jon, sto usando la versione mono, penso che dovrei lanciare [int, double] per far fluttuare prima con questi tipi. – Vontio

+0

@ Sam4Ever: versioni recenti di supporto mono digitazione dinamica, credo ... –

Problemi correlati