如果我使用的是 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
实例? Dispose
)?特别是对于searcher.Get().First()
这样的结构? 编辑:其他一些相关问题:
Dispose
吗? 他们俩也都实现了自己的
IDisposable
方法,尽管搜索者似乎仅从Dispose
继承了Component
实现;它不会添加自己的处置行为。 最佳答案
对于从ManagementObject
对象继承的所有对象,System.ComponentModel.Component
继承自Dispose
和you should call Component
explicitly。
您可以将LINQ
方法与自己的谓词一起使用,从而调用Dispose
本身:
var first = searcher.Get().First(x =>
{
bool result = Satisfy(x);
if (!result)
{
x.Dispose();
}
return result;
});
此代码等效于:
ManagementObject first = null;
foreach (var element in searcher.Get())
{
if (Satisfy(element))
{
first = element;
break;
}
else
{
element.Dispose();
}
}
if (first == null)
{
throw new InvalidOperationException("No match");
}
其中
Satisfy
是您自己的方法。关于c# - .Net WMI类-我必须处理哪些类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6639451/