You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:50:24