Вы можете воспользоваться делегатами и создать некоторый помощник c.
В этом случае вы можете использовать Action
или Func
. Добавьте другой метод расширения, который принимает Func
, если вам нужно вернуть какое-то значение из выполненной функции.
public static class SilentRunner
{
public static void Run(Action action, Action<Exception> onErrorHandler)
{
try
{
action();
}
catch (Exception e)
{
onErrorHandler(e);
}
}
public static T Run<T>(Func<T> func, Action<Exception> onErrorHandler)
{
try
{
return func();
}
catch (Exception e)
{
onErrorHandler(e);
}
return default(T);
}
}
И затем используйте его так:
SilentRunner.Run(
() => DoSomething(someObject),
ex => DoSomethingElse(someObject, ex));
В случае Func
Вы также можете получить результат:
var result = SilentRunner.Run(
() => DoSomething(someObject),
ex => DoSomethingElse(someObject, ex));