我正在阅读这篇文章并笑了http://mcfunley.com/239/exceptions-are-not-a-control-mechanism
在我的一个应用程序中,我不使用File.Exist甚至我的EXPECT文件存在很多时间。我尝试创建一个文件而不覆盖旧版本,如果失败,我将重命名为Filename(Try Number).ext并循环直到它打开。
在这种情况下我应该使用File.Exist吗?或者我应该继续尝试打开文件,循环直到我然后写模式?
答案 0 :(得分:2)
在我看来,由于以下几个原因,通常应将例外保留用于真正的例外情况:
当然,在您的特定情况下,依赖于异常可能是有意义的,因为事先检查File.Exitsts()
并不能保证文件在访问时存在,因此您可能必须包含异常情况< / p>
答案 1 :(得分:1)
这个问题被称为LBYL与EAFP:在你跳跃之前看看与比宽容更容易要求宽恕。有many disussions of this topic here in SO。
答案 2 :(得分:1)
我暂时将整个“特殊情况例外”的事情放在一边,只是简单地分析一下你的情况,以便说服它是正确的,你应该只在特殊情况下使用例外。
在你的情况下,你似乎在做
while (!opened) {
try {
<file_open>;
opened = true
} catch (exception) {
//ignore
}
}
你最终很容易吃掉所有的CPU时间。如果你这样做
while (!opened) {
if (file.exists) {
<file_open>
opened = true
} else {
Thread.sleep(<some_time>);
}
}
你会玩得很好,将你未使用的时间用于其他进程并将CPU保持在最低限度
所以在我看来,我会说首先测试一个非常好的主意。
答案 3 :(得分:0)
我建议检查File.Exist,否则异常路径可能会非常昂贵。
答案 4 :(得分:0)
例外情况适用于特殊情况。
你需要的只是一个测试;没有什么特别的,所以请使用File.Exist。