我有以下两个功能,几乎相同,唯一的区别是一个使用func
,其他 action
.如果可能的话,我想将它们合并为一个功能。
private static void TryCatch(Action action)
{
try
{
action();
}
catch (Exception x)
{
Emailer.LogError(x);
throw;
}
}
private static TResult TryCatch<TResult>(Func<TResult> func)
{
try
{
return func();
}
catch (Exception x)
{
Emailer.LogError(x);
throw;
}
}
请您参考如下方法:
你可以用你的第二个,Func<T>
版本,实现 Action
方法只是将 Action 包装在 lambda 中。这消除了一些重复的代码。
private static void TryCatch(Action action)
{
Func<object> fun =>
{
action();
return null;
};
TryCatch(fun);
}
话虽如此,这样做会产生额外的开销,因此就我个人而言,我可能会按照您目前的实现方式保留它(特别是考虑到您的原始版本在这种情况下恰好是多么简短和简单)。