使用Lambda表达式尝试没有抓到一个坏的做法?

时间:2010-09-06 06:51:05

标签: c# .net lambda

我在代码中有很多部分

try
{
    // not so important code, but don't want this to affect anything else
}

catch
{
}

使用这被认为是一种不好的做法吗?

Try(() => 
{
});

void Try(Action a)
{
    try
    {
        a();
    }
    catch
    {
        // ignore.
    }
}

5 个答案:

答案 0 :(得分:5)

当然,你总是可以添加一个异常处理程序:

void Try(Action a, Action<Exception> onErr)
{
    try
    {
        a();
    }
    catch (Exception e)
    {
        onErr(e);
    }
}

然后你就有了:

Try( 
    ()=> { /* do something */ }
    e => { } );

你可以有一个标准的空犯人

static void IgnoreError(Exception e) 
{
    #if DEBUG
    throw e;
    #end if
}

Try( 
    ()=> { /* do something */ }
    IgnoreError );

我认为这不是那么糟糕,但它非常不标准 - 你的代码会让人感到困惑,我认为它不会增加任何东西。考虑这一点很有意思,但我认为你的代码最终会让人感到困惑。

此外,虽然在某些情况下您可能希望忽略异常,但实际上并不希望这样做更容易。

答案 1 :(得分:3)

如果你真的不关心“不重要”代码的作用,那么我会说没关系。使用lambda使它更具可读性,但它也可以隐藏你“吞下”异常的事实。我个人喜欢把它留在那里,所以它是明确的,并在空的catch块中添加注释,解释为什么可以忽略任何错误。当然,评论是针对每种情况的。

答案 2 :(得分:3)

吞咽异常通常被认为是不好的做法,因为这会使程序的维护变得困难。

但是,将所有异常处理移至中心位置可能是朝着正确方向迈出的一步,因为它允许您在未经过整个代码库的情况下至少记录异常情况。
只要它局限于你真正不关心异常发生的地方,它就可以是一个积极的变化。

答案 3 :(得分:0)

void Try (Action a)相当模糊,其他方法更容易阅读

答案 4 :(得分:0)

标准空捕获或使用lambda做同样的事情都是不好的做法。见question。本指南article非常清楚地说明原因

  

捕获您无法做到的异常   合法地处理生皮至关重要   调试信息。