这是我的代码:
public void ReadSomeFile(string filePath)
{
if (!File.Exists(filePath))
throw new FileNotFoundException();
var stream = new FileStream(filePath, ....)
.....
}
我是否应该自己抛出异常(请看File.Exists
条件判断)? 如果文件不存在,FileStream
已经会抛出FileNotFoundException
了。在这里什么是良好的编程实践呢?代码分析说我们应该验证参数。但如果我直接将参数传递给另一个方法(我的或其他人的代码),并且该方法本身会抛出异常,那么在我的代码中验证参数的优点是什么呢?
FileNotFoundException
没有意义,实际上会引发竞争条件问题。你可以处理异常、让它传播或将其包装在自己的异常中。这分别对应于"我知道该怎么做"、"我不知道该怎么做"和"我想在堆栈更高的地方处理此异常"。 - LuaanfilePath
是否有效(即绝对路径,或者至少不包含Path.GetInvalidFileNameChars()
)。 - Alexei Levenkov