代码之家  ›  专栏  ›  技术社区  ›  alex2k8

如何在PowerShell中处理System.Xml.XmlWriter

  •  10
  • alex2k8  · 技术社区  · 15 年前

    我正在尝试处置XmlWriter对象:

    try
    {
        [System.Xml.XmlWriter] $writer = [System.Xml.XmlWriter]::Create('c:\some.xml')
    }
    finally
    {
        $writer.Dispose()
    }
    

    方法调用失败,因为 [System.Xml.XmlWellFormedWriter] “处置”。

     $writer -is [IDisposable]
     # True
    

    我该怎么办?

    2 回复  |  直到 15 年前
        1
  •  11
  •   Michael    15 年前

    处置是 protected 在…上 System.Xml.XmlWriter . 你应该使用 Close

    $writer.Close
    
        2
  •  8
  •   Community Mofi    7 年前

    以下是另一种方法:

    (get-interface $obj ([IDisposable])).Dispose()
    

    获取接口脚本可以在这里找到 http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx 并在这篇文章中提出了建议 response

    使用“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')) {
    
    }