about_Ref
簡短描述
描述如何建立及使用引用類型變數。 您可以使用參考類型變數來允許函式變更傳遞給它的變數值。
詳細描述
您可以藉由傳址或傳值,將變數傳遞至函式。
當您依值傳遞變數時,會傳遞數據的複本。
在下列範例中,函式會變更傳遞給它的變數值。 在 PowerShell 中,整數是實值型別,因此會以傳值方式傳遞。
因此,的值 $var
在函式範圍之外保持不變。
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
在下列範例中,包含的 Hashtable
變數會傳遞至函式。 Hashtable
是物件類型,因此預設會以傳址方式傳遞至函式。
以傳址方式傳遞變數時,函式可以變更數據,且該變更會在函式執行之後保存。
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
函式會新增新的機碼/值組,該組會保存在函式的範圍之外。
撰寫函式以接受參考參數
不論傳遞的數據類型為何,您都可以撰寫函式的程式代碼,以取得參數作為參考。 這需要您將參數類型指定為 System.Management.Automation.PSReference
、 或 [ref]
。
使用參考時,您必須使用 Value
類型的 屬性 System.Management.Automation.PSReference
來存取您的數據。
Function Test([ref]$data)
{
$data.Value = 3
}
若要將變數傳遞至預期參考的參數,您必須輸入將變數轉換成參考。
注意
兩者都需要括弧和括號。
$var = 10
Test -data ([ref]$var)
$var
3
傳遞 .NET 方法的參考
某些 .NET 方法可能需要您將變數傳遞為參考。 當方法的定義使用 關鍵詞 in
、 out
或 ref
參數時,它預期會有參考。
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
方法 TryParse
會嘗試將字串剖析為整數。 如果方法成功,它會傳回 $true
,而結果會儲存在您以傳址方式傳遞的變數中。
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
參考和範圍
參考允許在子範圍內變更父範圍中的變數值。
# Create a value type variable.
$i = 0
# Create a reference type variable.
$iRef = [ref]0
# Invoke a scriptblock to attempt to change both values.
&{$i++;$iRef.Value++}
# Output the results.
"`$i = $i;`$iRef = $($iRef.Value)"
$i = 0;$iRef = 1
只有參考類型的變數已變更。