В вашем примере вы можете создать метод stati c TryFindMessage
в дополнение к Find
. В случае исключения просто верните false. Например: bool Message.TryFind(..., Message message, out string result)
.
Но если у вас есть sh какой-то обобщенный c подход, который вы можете использовать с чем угодно, тогда вы можете воспользоваться делегатами и создать некоторый помощник stati 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));