有什么区别:
$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"
只是在改变内容,但我还没有找到确认。
(我确定这是重复的,但我还没有找到它)
答案 0 :(得分:5)
在函数中使用引用变量时,必须使用.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
的类型表明您正在对原始对象进行操作。