抛出异常时我应该省略else语句吗?

时间:2012-12-03 08:28:16

标签: c# if-statement exception-handling

比较下面的两个代码块:

if (args.Length != 1)
{
    throw new ArgumentException();
}    
if (String.IsNullOrEmpty(args[0])
{
     throw new ArgumentNullException();
}
File f = new File(args[0]);
if (!f.Exists)
{
    throw new FileNotFoundException();
}
// Perform tasks on the file

和此:

if (args.Length != 1)
{
    throw new ArgumentException();
}    
else if (String.IsNullOrEmpty(args[0])
{
    throw new ArgumentNullException();
}
else
{
    File f = new File(args[0]);
    if (!f.Exists)
    {
        throw new FileNotFoundException();
    }
    else
    {
        //Perform tasks on the file
    }
}

哪一个更好(在性能/可读性方面)?我不会在我的代码中捕获异常,因为应用程序必须有一个文件可以操作。

3 个答案:

答案 0 :(得分:4)

更好是非常主观的,所以我不会说一个比另一个好。我可以说的是第二个示例中的else块不是必需。我个人更喜欢这些代码,因为我觉得它更容易阅读。

答案 1 :(得分:1)

else没有理由,因为一旦你抛出exception,程序就会停止。可以肯定的是,如果程序在到达实际代码时尚未关闭,则没有错误。

出于可读性目的,我会省略else块,因为您可以安全地从代码中删除膨胀。

答案 2 :(得分:1)

使用哪个并不重要。第二个也适用于重构代码而不抛出异常(当你忘记插入else时出现奇怪的问题:-))。我不希望使用第一个声明来提高性能 - 至少,不是一个明显的声明。

然而,将异常消息传递给抛出的异常也是一个好主意。