Mi sono imbattuto in questo enigma mentre sviluppavo codice di gestione degli errori. Volevo passare un riferimento (out) a un messaggio di errore che verrebbe registrato. Ciò ha dato ai miei metodi anonimi la possibilità di eseguire controlli multipli, ognuno dei quali impostava il messaggio di errore secondo necessità.
Ho finito per scrivere un nuovo wrapper per il metodo anonimo che ha funzionato in modo diverso.Ma quello che pensavo potesse essere di qualche valore per qualcuno, è che avrei potuto semplicemente creare un metodo privato che aveva un parametro out, e definito un delegato, e ha fatto in modo che il mio codice lo usasse. Spero che questo aiuti/ispira qualcuno.
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);
}
fonte
2012-01-16 16:04:36
Mi chiedo PERCHE 'tu abbia mai passato un tipo anonimo al di fuori del corpo del metodo, a meno che tu non voglia imparare la gioia che è Reflection. – Will
Questa risposta alla domanda di collegamento originale non risponde sufficientemente? http://stackoverflow.com/questions/801147/scope-of-anonymous-methods/801563#801563 –
@Will: questo non ha nulla a che fare con i tipi anonimi. – SLaks