一千萬個為什麽

搜索

有沒有辦法使用一種方法來處理其他方法以避免代碼重復?

我想知道是否有一種編寫方法或類的方法可以向任何方法添加一些在許多方法之間共享的代碼。這些方法返回不同的東西,其中一些只是無效的。

下面是方法中重復的代碼的一部分。

StartTimer(MethodBase.GetCurrentMethod().Name);
try
{
   //Actual method body
}
catch (Exception ex)
{
    bool rethrow = ExceptionPolicy.HandleException(ex, "DALPolicy");
    if (rethrow)
    {
         throw;
    }
}
finally
{
    StopTimer(MethodBase.GetCurrentMethod().Name);
}

任何幫助將不勝感激。


適用於上述代碼的Nix解決方案

public T WrapMethod(Func func)
{
    StartTimer(func.Method.Name);
    try
    {
        return func();
    }
    catch (Exception ex)
    {
        bool rethrow = ExceptionPolicy.HandleException(ex, "DALPolicy");
        if (rethrow)
        {
            throw;
        }
    }
    finally
    {
        StopTimer(func.Method.Name);
    }
    return default(T);
}

最佳答案

我實際上有同樣的問題....

C#搜索新內容工具箱工具,如何模板化此代碼

public Result CreateLocation(LocationKey key)
{
    LocationDAO locationDAO = new LocationDAO();
    return WrapMethod(() => locationDAO.CreateLocation(key));
}


public Result RemoveLocation(LocationKey key)
{
    LocationDAO locationDAO = new LocationDAO();
    return WrapMethod(() =>  locationDAO.RemoveLocation(key));
}


static Result WrapMethod(Func> func)
{
    try
    {
        return func();
    }
    catch (UpdateException ue)
    {
        return new Result(default(T), ue.Errors);
    }
}

轉載註明原文: 有沒有辦法使用一種方法來處理其他方法以避免代碼重復?