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

是否可以在构造函数中引用另一个属性?

  •  0
  • iRon  · 技术社区  · 6 年前

    背景

    它以一个cmdlet作为 Save hash table in PowerShell object notation (PSON) ConvertTo-Expression . 将PowerShell对象序列化为PowerShell表达式的cmdlet。
    有点参与 -Depth 类似本机cmdlet的问题( ConvertTo-Xml ConvertTo-Json )由于重复的属性引用,我想知道这个问题是否可以在PowerShell表达式中得到很好的解决。

    例子

    $Object = @{
        Name = "Parent"
        Child = @{
            Name = "Child"
        }
    }
    $Object.Child.Parent = $Object
    

    在本例中 .Child.Parent 属性引用回 $Object ,意思是 $Object.Child.Parent.Child.Parent.Name Parent .
    目前 $Object | ConvertTo-Expression 返回 ScriptBlock 比如:

     @{
            'Child' = @{
                    'Parent' = $_
                    'Name' = 'Parent'
            }
            'Name' = 'Parent'
    }
    

    [ScriptBlock]::Create(
    @'
    $_ = @{
            'Child' = @{
                    'Parent' = $_
                    'Name' = 'Parent'
            }
            'Name' = 'Parent'
    }
    $_.Child.Parent = $_
    $_
    '@
    )
    

    (类似于示例中对象的初始构造方式。)
    恢复(调用、反序列化)此表达式需要以下内容:

    $Expression = [ScriptBlock]::Create(... # The above result
    $Object = &$Expression
    $Object.Child.Parent.Name
    

    问题

    是否有其他方法(例如使用 $This ,一个 ScriptProperty 或…)来还原 PowerShell
    是否可以在施工时参考其他物业?
    lazy initialization .)

    0 回复  |  直到 6 年前