Dela via


Om referens

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 bevaras 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.

Anteckning

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, outeller 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

Med referenser kan 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 ändrades.

Se även

about_Variables

about_Environment_Variables

about_Functions

about_Script_Blocks

about_Scopes