【发布时间】:2011-07-10 05:43:13
【问题描述】:
如果我使用的是ManagementObjectSearcher,我可以轻松地将其包装在using 块中:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
// ...
}
处理the collection returned from the searcher也很容易,因为foreach automatically calls dispose on the enumerator:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach(ManagementObject mo in searcher.Get())
{
// ...
}
}
但是ManagementObject 也实现了IDisposable:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach(ManagementObject mo in searcher.Get())
{
// ...
mo.Dispose(); // ?
}
}
- 我是否必须处置在这种情况下返回的每个
ManagementObject实例? - 如果我这样做了,我如何使它异常安全?
- 有没有办法在这种情况下仍然可以使用 Linq(并且仍然可以正确调用
Dispose)?尤其是像searcher.Get().First()这样的结构?
编辑:更多相关问题:
- 我是否还必须在搜索结果集合中调用
Dispose? - 搜索器怎么样?
他们都实现了自己的IDisposable 方法,尽管搜索器似乎只从Component 继承了Dispose 实现;它不会添加自己的处置行为。
【问题讨论】:
标签: c# linq wmi idisposable