【发布时间】:2013-06-04 19:51:43
【问题描述】:
我创建了一个抽象 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()?
【问题讨论】: