Я столкнулся с этой загадкой, когда разрабатывал некоторый код обработки ошибок. Я хотел передать ссылку (out) на сообщение об ошибке, которое будет зарегистрировано. Это дало моим анонимным методам возможность выполнить несколько проверок, каждая из которых при необходимости установила сообщение об ошибке.
Я закончил тем, что написал новую оболочку для анонимного метода, который работал по-другому. Но я подумал, что для кого-то это может иметь какое-то значение, так как я мог просто создать приватный метод с параметром out, определить делегата и заставить мой код использовать это. Надеюсь, что это помогает / вдохновляет кого-то.
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);
}