3

比较下面的两个代码块:

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
    }
}

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

4

3 回答 3

4

更好是高度主观的,所以我不会说一个比另一个更好。我说的是第二个例子中的 else 块是不必要的。我个人更喜欢那个代码,因为我认为它更容易阅读。

于 2012-12-03T08:30:11.080 回答
1

没有理由else,因为一旦你抛出一个,程序就会停止exception。可以安全地预期,如果程序在您到达实际代码时尚未关闭,则没有错误。

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

于 2012-12-03T08:30:02.943 回答
1

你使用哪个并不重要。如果您重构代码以不引发异常,则第二种方法也有效(当您忘记插入elsethen 时会出现奇怪的问题 :-))。我不希望通过使用第一个语句来提高任何性能 - 至少,不是一个值得注意的语句。

但是,最好将异常消息也传递给抛出的异常。

于 2012-12-03T08:31:27.310 回答