2015-01-02 90 views
2

之間有什麼區別:當使用.Value,這是唯一的工作爲什麼在使用ByRef時應將變量分配給「.Value」?

$A="Something" 

$A.Value="Something" 

我看到:

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"只是更改內容,但我還沒有找到確認t帽子。

(我敢肯定,這是一個重複的,但我還沒有找到它)

+0

您正在尋找的答案應該在[About_Ref](http://technet.microsoft.com/en-us/library/hh847792.aspx)中。嘗試更改對象時使用'.Value'只是一個事實。在SetByRef1中,類型從一個字符串到一個'System.Management.Automation.PSReference'。 – Matt

回答

3

當函數中使用的參考變量,你必須使用.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的類型表明您正在處理原始對象。

相關問題