代码分析警告两次处置对象的可能性

时间:2017-10-06 17:26:35

标签: c# visual-studio-2017 code-analysis streamwriter

刚刚对我继承的其中一个应用程序进行了代码分析,并引发了类似于以下代码的警告:

using (StreamWriter tw = File.AppendText("Log.txt"))
{
    try
    {
        tw.WriteLine(DateTime.Now.ToString("------------------------");
        tw.WriteLine(data);
    }
    catch(Exception ex)
    {
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "Error writing to the log file: {0}", ex.Message));
    }
    finally
    {
        tw.Close();
    }
}

如果我注释掉finally块,则不会发出警告。我的印象是关闭流编写器只关闭了底层文件,但实际上没有处理writer对象。代码分析是否被破坏,或者我是否误解了应该如何使用流编写器?

这是另一个例子,其中代码分析抱怨可能两次处理writer和底层流:

using (TextReader tr = new StreamReader(File.OpenRead(filename)))
{
    while (tr.ReadLine() != null)
    {
        counter++;
    }

    tr.Close();
}

它抱怨trFile.OpenRead(filename)

1 个答案:

答案 0 :(得分:2)

Close just calls Dispose on the object,是的,您要两次处理该对象。 (并不是两次处理对象是有问题的,只是多余的。)