C# - Streams是否应该始终关闭,即使它们没有正常打开?

Oic*_*rap 1 c# dispose stream visual-studio-2013

如果我使Stream对象打开一个文本文件OpenFileDialog,我应该在什么范围内关闭它?在同一范围内,我宣布它,或在其中一个ifs内(仅在正确打开的情况下关闭它)?

我给你留下代码,这样你就可以告诉我......

Stream arch_Usuarios;

OpenFileDialog openFileDialog_arch_Usuarios = new OpenFileDialog();

if (openFileDialog_arch_Usuarios.ShowDialog() == DialogResult.OK)
{
    if ((arch_Usuarios = openFileDialog_arch_Usuarios.OpenFile()) != null)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

问候.

Tim*_*ker 6

如果您将这些资源放在一个using声明中,您将不必担心它.这些对象在超出范围时会自动清除,无论代码如何退出,即使抛出异常也是如此.

using(OpenFileDialog openFileDialog_arch_Usuarios = new OpenFileDialog())
{
    if (openFileDialog_arch_Usuarios.ShowDialog() == DialogResult.OK)
    {
        using(Stream arch_Usuarios = openFileDialog_arch_Usuarios.OpenFile())
        {
            ...
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的一个充满怨言的using声明.你结束了可笑的缩进代码.轻微的抱怨,但仍然让我烦恼.