这是我的代码:
public void ReadSomeFile(string filePath)
{
if (!File.Exists(filePath))
throw new FileNotFoundException();
var stream = new FileStream(filePath, ....)
.....
}
Run Code Online (Sandbox Code Playgroud)
我应该自己抛出异常(见File.Exists支票)吗?如果文件不存在,FileStream则会抛出FileNotFoundException.这里有什么好的编程习惯?代码分析说我们应该验证我们的参数.但是如果我将该参数直接传递给另一个方法(我的或其他代码)并且该方法本身会抛出异常,那么在我的代码中验证参数的优点是什么?
Cod*_*ter 118
if (File.Exists(f)) { DoSomething(f) }(或否定)是一种反模式.可以在这两个语句之间删除或创建文件,因此检查它的存在是没有意义的.
除此之外,正如评论中指出的那样,虽然File.Exists()可能返回true,但实际打开文件仍然会因各种原因而失败.所以你必须重复错误检查并抛出文件的开头.
因为你不想重复自己,而是保持你的代码干,只是尝试打开文件然后new FileStream()抛出.然后您可以捕获异常,如果您愿意,可以重新抛出原始异常或抛出特定于应用程序的异常.
当然,呼叫File.Exists()是合理的,但不是这种模式.
Ian*_*ose 15
调用你的方法ReadSomeFile并将其filename作为输入,因此抛出一个是合理的FileNotFoundException.因为你不能通过捕获异常然后自己抛出它来添加任何值,只需让.NET抛出它.
但是,如果你的方法是LoadData(databaseName),它必须访问许多文件,捕获异常,并抛出自定义异常可能是有价值的,因为你可以添加databaseName到异常以及其他有用的信息.