我可以修改Array之类的PSCustomObject属性:
$a.b.c += "new item"
有可能用功能吗?我的意思是传递$a.b.c
来起作用并对其进行修改。看来这并非微不足道(即使可能的话):我尝试了[ref]
,但没有成功。对我而言,唯一有效的方法是返回新值并进行赋值,但这涉及函数调用两侧的$a.b.c
表达式,这会使行变长。我也尝试过:
function AddItem {
Param(
$Obj,
$Value,
[switch]$Uniq
)
$MutObj = [System.Collections.ArrayList]$Obj
$MutObj.Add($Value) > $null
}
但是这也不起作用,似乎$a.b.c += x
实际上是change property "c" of $a.b object
,而我在函数作用域中还没有$a.b
。即使在体内进行功能和修改后,它也可以实现吗?
答案 0 :(得分:2)
我认为您要问的是为什么对象在功能上没有变化。
Powershell将函数变量作为值处理,这意味着它会创建一个与传入的变量完全相同的变量,并在函数范围内对其进行更改。您要做的是通过引用进行此操作,这意味着它将与传递给函数的同一对象混在一起。这可以通过将[Ref]类型添加到传递给参数的值中来完成。在此示例中,executePendingBindings()
完整脚本
Additem -Object ([ref]$JSON) -Value "TEST"