about_Ref
Kurze Beschreibung
Beschreibt, wie eine Verweistypvariable erstellt und verwendet wird. Sie können Referenztypvariablen verwenden, damit eine Funktion den Wert einer Variablen ändern kann, die an sie übergeben wird.
Lange Beschreibung
Sie können Variablen per Verweis oder Wert an Funktionen übergeben.
Wenn Sie eine Variable nach Wert übergeben, übergeben Sie eine Kopie der Daten.
Im folgenden Beispiel ändert die Funktion den Wert der an sie übergebenen Variablen. In PowerShell sind ganze Zahlen Werttypen, sodass sie nach Wert übergeben werden.
Daher ist der Wert von $var
außerhalb des Gültigkeitsbereichs der Funktion unverändert.
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
Im folgenden Beispiel wird eine Variable mit einer Hashtable
Funktion übergeben. Hashtable
ist ein Objekttyp, sodass er standardmäßig per Verweis an die Funktion übergeben wird.
Beim Übergeben einer Variablen anhand eines Verweises kann die Funktion die Daten ändern und diese Änderung nach ausführung der Funktion beibehalten werden.
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
Die Funktion fügt ein neues Schlüssel-Wert-Paar hinzu, das außerhalb des Bereichs der Funktion beibehalten wird.
Schreiben von Funktionen zum Akzeptieren von Referenzparametern
Sie können Ihre Funktionen so codieren, dass ein Parameter als Verweis verwendet wird, unabhängig vom übergebenen Datentyp. Dies erfordert, dass Sie den Parametertyp als System.Management.Automation.PSReference
, oder [ref]
.
Bei Verwendung von Verweisen müssen Sie die Value
Eigenschaft des System.Management.Automation.PSReference
Typs verwenden, um auf Ihre Daten zuzugreifen.
Function Test([ref]$data)
{
$data.Value = 3
}
Um eine Variable an einen Parameter zu übergeben, der einen Verweis erwartet, müssen Sie die Variable als Verweis umwandeln.
Hinweis
Die Klammern und Klammern sind BEIDE erforderlich.
$var = 10
Test -data ([ref]$var)
$var
3
Übergeben von Verweisen auf .NET-Methoden
Bei einigen .NET-Methoden müssen Sie möglicherweise eine Variable als Verweis übergeben. Wenn die Definition der Methode die Schlüsselwörter in
, out
, oder ref
für einen Parameter verwendet, erwartet sie einen Verweis.
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
Die TryParse
Methode versucht, eine Zeichenfolge als ganze Zahl zu analysieren. Wenn die Methode erfolgreich verläuft, wird sie zurückgegeben$true
, und das Ergebnis wird in der Variablen gespeichert, die Sie per Verweis übergeben haben.
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
Verweise und Bereiche
Verweise ermöglichen es, den Wert einer Variablen im übergeordneten Bereich innerhalb eines untergeordneten Bereichs zu ändern.
# 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
Nur die Variable des Verweistyps wurde geändert.