Нам всегда нужно попробовать поймать в нашем коде, и он становится уродливым, как
public void foo()
{
try
{
DoSomething();
}
catch(Exception e)
{
//do whatever with e
}
}
public int FooReturnInt()
{
try
{
return IntAfterSomeCalculation();
}
catch(Exception e)
{
//do exactly whatever with e as foo()
}
}
Представьте, что у нас есть огромный класс с множеством общественных функций, подобных этому, и мы должны применять один и тот же try catch в каждой отдельной функции.
В идеале, поскольку часть catch try идентична, и мы можем передать параметр Func < > as вспомогательной функции, которая делает что-то вроде
public void TryCatch(Func<something> theFunction)
{
try
{
theFunction();
}
catch(Exception e)
{
//processthe common exception
}
}
Тогда я бы предположил, что это уберет мой код, а теперь проблема в том, как правильно записать эту функцию? Тип возврата этой функции зависит от типа возврата функции.