我有许多方法需要一些具有相同模式的日志记录。有些方法需要返回一些值,有些则不需要。我创建了一个带有 Action 参数的方法,以避免复制粘贴所有逻辑。它看起来像这样:
private void Execute(Action action)
{
Logger.Start();
try
{
action();
}
catch(Exception exception)
{
Logger.WriteException();
throw;
}
finally
{
Logger.Finish();
}
}
现在我有一些这样的电话
public void DoSomething(string parameter)
{
Execute(() => GetProvider(parameter).DoSomething());
}
但我需要一些返回值的函数。最好的方法是什么?我现在找到了两个:
1) 使用 Func 创建 Execute 方法的副本
private T Execute<T>(Func<T> action)
{
Logger.Start();
try
{
return action();
}
catch(Exception exception)
{
Logger.WriteException();
throw;
}
finally
{
Logger.Finish();
}
}
此方法有效,但也有一些复制粘贴。
2)欺骗参数成为一个动作:
public Result DoSomething(string parameter)
{
Result result = null;
Execute(() => result = GetProvider(parameter).DoSomething());
return result;
}
这不需要复制粘贴,但看起来不太好。
有没有办法以某种方式加入 Action 和 Func 以避免这些方法中的任何一种,或者可能有另一种方法来实现相同的结果?