Un binary operator es cualquier función que acepta dos operandos. Es simple abstraer esta funcionalidad usando delegates, que básicamente son envoltorios alrededor de métodos (funciones).
Para hacer esto más claro, podemos definir un método genérico que no hace nada más que invocar el delegado usando los parámetros especificados, y devolver su resultado:
public Tout GetResult<TIn, TOut>(TIn a, TIn b, Func<TIn, TIn, TOut> @operator)
{
return @operator(a, b);
}
y usted podría usarlo para pasar cualquier combinación de parámetros y los operadores:
private bool AreEqual(int a, int b)
{
return a.Equals(b);
}
private int Subtract(int a, int b)
{
return a - b;
}
a continuación, puede utilizar el mismo método genérico para hacer lo que desee operación:
// use the "AreEqual" operator
bool equal = GetResult(10, 10, AreEqual);
// use the "Subtract" operator
int difference = GetResult(10, 10, Subtract);
El uso de las expresiones lambda, incluso se puede crear el operador "sobre la marcha", especificando como un método anónimo:
// define a "Product" operator as an anonymous method
int product = GetResult(10, 10, (a,b) => a*b);
Sí, es posible, pero la forma más genérica para hacerlo significa el aprendizaje acerca de [Expression Trees] (http://msdn.microsoft.com/en-us/library/bb397951.aspx). :) ¿Cómo se determinará el operador que se utilizará? –
duplicado exacto http://stackoverflow.com/questions/1528319/operators-as-method-parameters-in-c – mcabral