重构Func和Action

时间:2014-05-30 10:56:14

标签: c# refactoring

我有一个示例测试方法:首先是返回值,第二个是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;
            }
    }
    }

2 个答案:

答案 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。