比较下面的两个代码块:
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
}
}
哪一个更好(在性能/可读性方面)?我不会在我的代码中捕获异常,因为应用程序必须有一个文件可以操作。
答案 0 :(得分:4)
更好是非常主观的,所以我不会说一个比另一个好。我可以说的是第二个示例中的else块不是必需。我个人更喜欢这些代码,因为我觉得它更容易阅读。
答案 1 :(得分:1)
else
没有理由,因为一旦你抛出exception
,程序就会停止。可以肯定的是,如果程序在到达实际代码时尚未关闭,则没有错误。
出于可读性目的,我会省略else块,因为您可以安全地从代码中删除膨胀。
答案 2 :(得分:1)
使用哪个并不重要。第二个也适用于重构代码而不抛出异常(当你忘记插入else
时出现奇怪的问题:-))。我不希望使用第一个声明来提高性能 - 至少,不是一个明显的声明。
然而,将异常消息传递给抛出的异常也是一个好主意。