me encontré con este dilema, mientras que el desarrollo de un código de gestión de errores. Quería pasar una referencia (salida) a un mensaje de error que se registraría. Esto le dio a mis métodos anónimos la posibilidad de realizar múltiples comprobaciones, cada una configurando el mensaje de error según sea necesario.
Terminé escribiendo un nuevo contenedor para el método anónimo que funcionaba de manera diferente.Pero lo que pensé que podría ser de algún valor para alguien, es que simplemente podría haber hecho un método privado que tuviera un parámetro de salida, y haya definido un delegado, y haya hecho que mi código lo use. Espero que esto ayude/inspire a alguien.
protected delegate void OutStringDelegate(int divider, out string errorText);
protected void codeWrapper(int divider, OutStringDelegate del)
{
string ErrorMessage = "An Error Occurred.";
try
{
del(divider, out ErrorMessage);
}
catch
{
LogError(ErrorMessage);
}
}
public void UseWrapper(int input)
{
codeWrapper(input, codeToCall);
}
private int somePrivateValue = 0;
private void codeToCall(int divider, out string errorMessage)
{
errorMessage = "Nice Error Message here!";
somePrivateValue = 1/divider; // call me with zero to cause error.
}
private void LogError(string msg)
{
Console.WriteLine(msg);
}
Me pregunto POR QUÉ pasarás un tipo anónimo fuera del cuerpo de un método, a menos que quieras aprender la alegría que es Reflexión. – Will
¿Responde esta respuesta en la pregunta del enlace original lo suficiente? http://stackoverflow.com/questions/801147/scope-of-anonymous-methods/801563#801563 –
@Will: Esto no tiene nada que ver con los tipos anónimos. – SLaks