about_Ref
Krótki opis
Opisuje sposób tworzenia i używania zmiennej typu odwołania. Zmienne typu odwołania umożliwiają funkcji zmianę wartości zmiennej przekazanej do niej.
Długi opis
Zmienne można przekazywać do funkcji według odwołania lub wartości.
Gdy przekazujesz zmienną według wartości, przekazujesz kopię danych.
W poniższym przykładzie funkcja zmienia wartość zmiennej przekazanej do niej. W programie PowerShell liczby całkowite są typami wartości, więc są przekazywane przez wartość.
W związku z tym wartość parametru $var
jest niezmieniona poza zakresem funkcji.
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
W poniższym przykładzie zmienna zawierająca Hashtable
element jest przekazywana do funkcji. Hashtable
jest typem obiektu, więc domyślnie jest przekazywany do funkcji przez odwołanie.
Podczas przekazywania zmiennej przez odwołanie funkcja może zmienić dane i ta zmiana będzie się powtarzać po wykonaniu funkcji.
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
Funkcja dodaje nową parę klucz-wartość, która utrzymuje się poza zakresem funkcji.
Pisanie funkcji w celu akceptowania parametrów referencyjnych
Funkcje można kodować, aby przyjmować parametr jako odwołanie, niezależnie od typu przekazanych danych. Wymaga to określenia typu parametrów jako System.Management.Automation.PSReference
, lub [ref]
.
W przypadku używania odwołań należy użyć Value
właściwości System.Management.Automation.PSReference
typu, aby uzyskać dostęp do danych.
Function Test([ref]$data)
{
$data.Value = 3
}
Aby przekazać zmienną do parametru, który oczekuje odwołania, należy wpisać rzutowanie zmiennej jako odwołanie.
Uwaga
Nawiasy i nawiasy są wymagane.
$var = 10
Test -data ([ref]$var)
$var
3
Przekazywanie odwołań do metod platformy .NET
Niektóre metody platformy .NET mogą wymagać przekazania zmiennej jako odwołania. Gdy definicja metody używa słów kluczowych in
, out
lub ref
w parametrze , oczekuje odwołania.
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
Metoda TryParse
próbuje przeanalizować ciąg jako liczbę całkowitą. Jeśli metoda powiedzie się, zwraca $true
wartość , a wynik jest przechowywany w zmiennej przekazanej przez odwołanie.
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
Odwołania i zakresy
Odwołania umożliwiają zmianę wartości zmiennej w zakresie nadrzędnym w zakresie podrzędnym.
# 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
Zmieniono tylko zmienną typu odwołania.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla