C#:是否正在使用和尝试使用StreamReader配置错误的选项?

cha*_*r m 0 file-io dispose idisposable using c#-2.0

想一想:

StreamReader reader = null;

try
{
    reader = new StreamReader(_fileName);
}
catch
{
    //show error that file not found
    reader.Dispose();
    return false;
}

try
{
    //code to read file
}
catch
{
   //show error badly formed file
}
finally
{
    reader.Dispose();
}
//return 
Run Code Online (Sandbox Code Playgroud)

当无法打开文件时,上面的代码不起作用,因为它调用Dispose for null导致异常.

我不想使用因为我想分开打开文件和阅读它的问题.这可以通过百万种不同的渔获量实现,但我不想这样做.另外如果使用与try-finally相同,那么"隐藏Dispose"会抛出不需要的异常吗?当我需要的只是捕获异常打开它并读取异常时,这将是最好的方法吗?

谢谢和BR - 马蒂

Ode*_*ded 6

最好使用以下using声明:

using(StreamReader reader = new StreamReader(_fileName))
{
}
Run Code Online (Sandbox Code Playgroud)

编译器将为您创建正确的dispose语义.

你仍然可以使用try它,而不用担心自己处理它:

try
{
    using(StreamReader reader = new StreamReader(_fileName))
    {
         try
         {
            //code to read the file
         }
         catch
         {
            //show error badly formed file
         }
    }
}
catch
{
    // show error that file not found
}
Run Code Online (Sandbox Code Playgroud)