刚跑代码分析我继承的一个应用程序,并提出了类似下面的代码警告:代码分析警告有关对象废弃的潜在两次
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
块,则不会引发警告。我的印象是关闭一个流编写器只关闭底层文件,但实际上并没有处理编写器对象。代码分析是否被破解,或者我误解了应该如何使用流编写器?
在此处,代码分析抱怨两个作家的可能的部署和底层流两次又如:
using (TextReader tr = new StreamReader(File.OpenRead(filename)))
{
while (tr.ReadLine() != null)
{
counter++;
}
tr.Close();
}
它抱怨都tr
和File.OpenRead(filename)
'using'自动处理创建的实例,您不必显式调用'.Close()'或'.Dispose()'。我建议谷歌搜索,如何使用'工作 –
是的,'关闭'调用'处置'。这是一个奇怪的API。 – Blorgbeard
@o_O问题作者表示他们认为“Close”与处置不同,并不是“使用”不处理对象。 – Servy