He aquí un ejemplo de cómo esto podría ser utilizado. Desea inicializar un constructor con el resultado de unas pocas líneas de código que no pueden escribirse como una función porque así es como se estructura la API de terceros.
Es solo un código de pegamento para evitar escribir una función independiente que nunca se llama en ningún otro lado. Estoy usando Func
en lugar de Action
, pero la respuesta es la misma que user166390.
// imagine several dozens of lines that look like this
// where the result is the return value of a function call
fields.Add(new ProbeField(){
Command = "A",
Field = "Average",
Value = be.GetAverage()
});
// now you need something that can't be expressed as function call
// so you wrap it in a lambda and immediately call it.
fields.Add(new ProbeField(){
Command = "C",
Field = "Cal Coeff",
Value = ((Func<string>)(() => {
CalCoef coef;
Param param;
be.GetCalibrationCoefficients(out coef, out param);
return coef.lowDet1.ToString();
}))()
});
Espera ... ¿qué? ¿Por qué es una expresión lambda? – scottheckel
El motivo por el cual su código no es válido es porque no le ha dicho al compilador si desea 'Action' o' Expression '. Si lanzas esa expresión lambda a 'Action', podrás invocar' Invoke' en ella o utilizar la sintaxis method-call '()' para invocarla. –
phoog
Mi imaginación podría estar fallando, ¿hay una necesidad real de hacer esto? –