$A="Something"
和
$A.Value="Something"
我知道只有当 .Value
.Value
function main { $A="Original A" $B="Original B" SetByRef1 ([ref]$A) SetByRef2 ([ref]$B) $A $B #output: Changed A #output: Original B } function SetByRef1([ref]$A) { $A.Value = "Changed A" } function SetByRef2([ref]$B) { $B = "Changed B" } main
我想,那 $B = "Changed B" 定义了一个新的变量B,而 $A.Value = "Changed A"
$B = "Changed B"
$A.Value = "Changed A"
(我确定这是一个副本,但我没有找到它)
.Value About_Ref
PS C:\ps-test> function double >> { >> param ([ref]$x) $x.value = $x.value * 2 >> }
如果你在函数内部检查对象,你可以看到区别。函数内部 SetByRef1 我加了以下几行。
SetByRef1
$a.GetType().FullName $a.value.GetType().FullName
System.Management.Automation.PSReference`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] System.String
类型 $a.value 显示您正在对原始对象执行操作。
$a.value