能否在创建PSCustomObject时实现自身属性的自引用?
PSCustomObject创建时实现属性自引用的方法
在创建[PSCustomObject]的哈希表定义阶段,没办法直接用$self这类自引用变量——因为此时对象还没实例化,哈希表只是一堆键值对的集合,没有指向最终对象的引用,你示例里的写法会直接报错。
给你几个可行的替代方案:
1. 先创建基础对象,再追加依赖属性
先定义不含依赖属性的基础对象,等对象创建完成后,再通过Add-Member添加需要引用其他属性的字段:
$objInfo = [PSCustomObject]@{ name = 'TheObjectName' color = 'red' size = 'small' } $objInfo | Add-Member -MemberType NoteProperty -Name mystring -Value "The $($objInfo.name) is $($objInfo.color) and $($objInfo.size)"
2. 使用动态脚本属性(ScriptProperty)
如果希望依赖属性能自动跟随基础属性变化,可以用脚本属性代替普通属性。脚本属性里用$this指代当前对象,每次访问该属性时都会重新计算值:
$objInfo = [PSCustomObject]@{ name = 'TheObjectName' color = 'red' size = 'small' } | Add-Member -MemberType ScriptProperty -Name mystring -Value { "The $($this.name) is $($this.color) and $($this.size)" } -PassThru
比如后续修改$objInfo.color = 'blue',再访问$objInfo.mystring就会自动变成"The TheObjectName is blue and small"。
3. 提前用变量复用硬编码值
如果只是想避免硬编码时重复输入相同内容,可以把公共值先存在变量里,创建对象时直接引用变量:
$name = 'TheObjectName' $color = 'red' $size = 'small' $objInfo = [PSCustomObject]@{ name = $name color = $color size = $size mystring = "The $name is $color and $size" }
这种方式修改时只需要改变量的值,不用在对象定义里改多处,完全适配你说的硬编码场景。
内容的提问来源于stack exchange,提问作者DDD
相关产品推荐
相关产品推荐

