我创建了一种方法来抽象 try/catch 功能。我有大约 30 种方法具有完全相同的 try/catch 场景。所以我把它放在一种方法中:
private T Invoke<T>(Func<T> func)
{
try
{
return func.Invoke();
}
catch (Exception ex)
{
throw LogAndThrowFaultException(ex);
}
}
现在,大多数方法都这样称呼它:
public IEnumerable<PingResponse> GetAllForPingRequest(PingRequest pingRequest)
{
return Invoke(() => PingResponseLogic.GetAllForPingRequest(pingRequest));
}
我的问题是我只有几个方法可以调用它而无需返回值:
Invoke<void>(() => CustomVariableGroupLogic.Delete(customVariableGroup));
但是,我不能void
在那里使用。该Invoke()
方法需要一个func
,但在这种情况下它需要是一个action
。我做了一些研究,看起来我可能必须创建另一种Invoke()
方法,但让它采取行动。不过,这些建议来自 2009 年和 2010 年。是否有可能以某种方式使用我的 func 方法而不必创建另一个Invoke()
方法Invoke2()
?