about_Ref
Kort beskrivning
Beskriver hur du skapar och använder en referenstypvariabel. Du kan använda referenstypvariabler för att tillåta att en funktion ändrar värdet för en variabel som skickas till den.
Lång beskrivning
Du kan skicka variabler till funktioner efter referens eller värde.
När du skickar en variabel efter värde skickar du en kopia av data.
I följande exempel ändrar funktionen värdet för variabeln som skickas till den. I PowerShell är heltal värdetyper så att de skickas av värde.
Därför är värdet för $var
oförändrat utanför funktionens omfång.
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
I följande exempel skickas en variabel som innehåller en Hashtable
till en funktion. Hashtable
är en objekttyp så som standard skickas den till funktionen som referens.
När du skickar en variabel med referens kan funktionen ändra data och den ändringen kvarstår när funktionen har körts.
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
Funktionen lägger till ett nytt nyckel/värde-par som finns kvar utanför funktionens omfång.
Skriva funktioner för att acceptera referensparametrar
Du kan koda dina funktioner för att ta en parameter som referens, oavsett vilken typ av data som skickas. Detta kräver att du anger parametertypen som System.Management.Automation.PSReference
, eller [ref]
.
När du använder referenser måste du använda Value
egenskapen för typen System.Management.Automation.PSReference
för att komma åt dina data.
Function Test([ref]$data)
{
$data.Value = 3
}
Om du vill skicka en variabel till en parameter som förväntar sig en referens måste du skriva cast-variabeln som referens.
Kommentar
Hakparenteserna och parenteserna krävs båda.
$var = 10
Test -data ([ref]$var)
$var
3
Skicka referenser till .NET-metoder
Vissa .NET-metoder kan kräva att du skickar en variabel som referens. När metodens definition använder nyckelorden in
, out
eller ref
på en parameter förväntar den sig en referens.
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
Metoden TryParse
försöker parsa en sträng som ett heltal. Om metoden lyckas returneras $true
, och resultatet lagras i variabeln som du skickade med referens.
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
Referenser och omfång
Referenser tillåter att värdet för en variabel i det överordnade omfånget ändras inom ett underordnat omfång.
# 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
Endast referenstypens variabel har ändrats.