为什么在使用 ByRef 时要为变量赋值“.Value”?
Why variables should be assigned with ".Value" when using ByRef?
有什么区别:
$A="Something"
和
$A.Value="Something"
我看到这仅在使用 .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"
只是改变了内容,但我还没有找到证实。
在函数中使用引用变量时,必须使用 .Value
与原始对象交互,如 About_Ref
中所示
PS C:\ps-test> function double
>> {
>> param ([ref]$x) $x.value = $x.value * 2
>> }
如果您在函数内部检查对象,您可以看出不同之处。在函数 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="Something"
和
$A.Value="Something"
我看到这仅在使用 .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"
只是改变了内容,但我还没有找到证实。
在函数中使用引用变量时,必须使用 .Value
与原始对象交互,如 About_Ref
PS C:\ps-test> function double
>> {
>> param ([ref]$x) $x.value = $x.value * 2
>> }
如果您在函数内部检查对象,您可以看出不同之处。在函数 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
的类型说明你是在对原始对象进行操作。