ale*_*2k8 10 powershell dispose idisposable
我正在尝试处置XmlWriter对象:
try
{
[System.Xml.XmlWriter] $writer = [System.Xml.XmlWriter]::Create('c:\some.xml')
}
finally
{
$writer.Dispose()
}
Run Code Online (Sandbox Code Playgroud)
错误:
方法调用失败,因为[System.Xml.XmlWellFormedWriter]不包含名为"Dispose"的方法.
另一方面:
$writer -is [IDisposable]
# True
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
Mic*_*ael 11
处置是保护上System.Xml.XmlWriter.你应该使用Close.
$writer.Close
Run Code Online (Sandbox Code Playgroud)
这是另一种方法:
(get-interface $obj ([IDisposable])).Dispose()
Run Code Online (Sandbox Code Playgroud)
Get-Interface脚本可以在http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx找到,并在此响应中提出.
使用'using'关键字,我们得到:
$MY_DIR = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
# http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx
. ($MY_DIR + '\get-interface.ps1')
# A bit modified code from http://blogs.msdn.com/powershell/archive/2009/03/12/reserving-keywords.aspx
function using
{
param($obj, [scriptblock]$sb)
try {
& $sb
} finally {
if ($obj -is [IDisposable]) {
(get-interface $obj ([IDisposable])).Dispose()
}
}
}
# Demo
using($writer = [System.Xml.XmlWriter]::Create('c:\some.xml')) {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3988 次 |
| 最近记录: |