考虑到以下代码,有人可以向我解释为什么以及为什么不使用'使用'? 我已经阅读了IDisposable的经验法则,但为什么IDisposable是决定因素?
private string GetWMIProperty(string property)
{
string value = string.Empty;
SelectQuery selectQuery = new SelectQuery("Win32_OperatingSystem");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery))
{
foreach (ManagementObject mo in searcher.Get())
{
value = mo[property].ToString();
}
}
return value;
}
答案 0 :(得分:2)
using
转换为try-finally
块。因此,即使遇到异常,它也会调用封闭对象的Dispose
方法。
请参阅:using Statement (C# Reference)
using语句确保即使调用Dispose也会调用 在对象上调用方法时发生异常。您可以 通过将对象放在try块中来实现相同的结果 然后在finally块中调用Dispose;其实这是怎么回事 using语句由编译器翻译。
答案 1 :(得分:0)
这不是必然的决定因素。 IDisposable
仅需要对象实现void Dispose()
。事实上,许多实现IDisposable
的对象在“处置”时甚至都没有做任何事情。您必须阅读文档或查看每种情况下的反编译代码,以确定处理对象是否值得,无论是使用using
还是调用Dispose()
。
要更直接地回答您的问题,如果处理有问题的对象清理某些资源(打开文件,数据库连接等),您可能希望使用using
。