理解C#正确使用'using'关键字

时间:2014-02-28 20:35:12

标签: c# using

考虑到以下代码,有人可以向我解释为什么以及为什么不使用'使用'? 我已经阅读了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;
}

2 个答案:

答案 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