我有一个示例测试方法:首先是返回值,第二个是void。如何重构这个方法体中的重复?
Func method:
public Tout Execute<T1,T2, Tout>(Func<T1, Tout > func)
{
try{
var service = CreateService<T1, T2>();
try
{
Tout response = func(service);
service.Close();
return response;
}
catch (Exception)
{
service.Abort();
throw;
}
}
}
行动方法:
public void Execute<T1,T2>(Action<T1> action)
{
try{
var service = CreateService<T1, T2>();
try
{
action(service);
service.Close();
}
catch (Exception)
{
service.Abort();
throw;
}
}
}
答案 0 :(得分:1)
您可以将Action
包裹在Func
:
public void Execute<T1,T2>(Action<T1> action)
{
Execute<T1, T2, object>(a => { action(a); return null; });
}
答案 1 :(得分:0)
可能不是你期望在这里得到的答案,但是如果有&#34; service&#34;实现IDisposable?然后你可以使用(var service = ..){...}来摆脱try..catch。如果服务尚未关闭,Dispose可以调用Abort。