我有以下两个功能,几乎相同,唯一的区别是一个使用func ,其他 action .如果可能的话,我想将它们合并为一个功能。

    private static void TryCatch(Action action) 
    { 
        try 
        { 
            action(); 
        } 
        catch (Exception x) 
        { 
            Emailer.LogError(x); 
            throw; 
        } 
    } 
 
    private static TResult TryCatch<TResult>(Func<TResult> func) 
    { 
        try 
        { 
            return func(); 
        } 
        catch (Exception x) 
        { 
            Emailer.LogError(x); 
            throw; 
        } 
    } 

请您参考如下方法:

你可以用你的第二个,Func<T>版本,实现 Action方法只是将 Action 包装在 lambda 中。这消除了一些重复的代码。

private static void TryCatch(Action action) 
{ 
    Func<object> fun =>  
       { 
           action(); 
           return null; 
       }; 
    TryCatch(fun); 
} 

话虽如此,这样做会产生额外的开销,因此就我个人而言,我可能会按照您目前的实现方式保留它(特别是考虑到您的原始版本在这种情况下恰好是多么简短和简单)。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!