Mer*_*ham 8 c# linq wmi idisposable
如果我使用的是ManagementObjectSearcher,我可以轻松地将其包装在一个using块中:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
由于在枚举器上自动调用dispose,因此处理从搜索者返回的集合也很容易:foreach
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach(ManagementObject mo in searcher.Get())
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但ManagementObject也实现IDisposable:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach(ManagementObject mo in searcher.Get())
{
// ...
mo.Dispose(); // ?
}
}
Run Code Online (Sandbox Code Playgroud)
ManagementObject在此方案中返回的每个实例?Dispose)?特别是对于像searcher.Get().First()?编辑:一些更相关的问题:
Dispose搜索结果集合?他们都实现了自己的IDisposable方法,虽然看起来搜索者只继承了Dispose实现Component; 它不会添加自己的处置行为.
ManagementObject继承自,System.ComponentModel.Component并且您应该Dispose显式调用所有从Component对象继承的对象。您可以使用LINQ带有自己的谓词的方法来调用Dispose自身:
var first = searcher.Get().First(x =>
{
bool result = Satisfy(x);
if (!result)
{
x.Dispose();
}
return result;
});
Run Code Online (Sandbox Code Playgroud)
这段代码相当于:
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");
}
Run Code Online (Sandbox Code Playgroud)
Satisfy自己的方法在哪里。
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |