about_Ref
Descrizione breve
Viene descritto come creare e usare una variabile di tipo riferimento. È possibile usare variabili di tipo riferimento per consentire a una funzione di modificare il valore di una variabile passata.
Descrizione lunga
È possibile passare variabili alle funzioni per riferimento o per valore.
Quando si passa una variabile per valore, si passa una copia dei dati.
Nell'esempio seguente la funzione modifica il valore della variabile passata. In PowerShell i numeri interi sono tipi valore in modo che vengano passati per valore.
Pertanto, il valore di $var
è invariato all'esterno dell'ambito della funzione.
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
Nell'esempio seguente viene passata una variabile contenente un Hashtable
oggetto a una funzione . Hashtable
è un tipo di oggetto, quindi per impostazione predefinita viene passato alla funzione in base al riferimento.
Quando si passa una variabile per riferimento, la funzione può modificare i dati e tale modifica viene mantenuta dopo l'esecuzione della funzione.
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
La funzione aggiunge una nuova coppia chiave-valore che persiste all'esterno dell'ambito della funzione.
Scrittura di funzioni per accettare parametri di riferimento
È possibile codificare le funzioni per accettare un parametro come riferimento, indipendentemente dal tipo di dati passato. A tale scopo, è necessario specificare il tipo di parametri come System.Management.Automation.PSReference
o [ref]
.
Quando si usano riferimenti, è necessario utilizzare la Value
proprietà del System.Management.Automation.PSReference
tipo per accedere ai dati.
Function Test([ref]$data)
{
$data.Value = 3
}
Per passare una variabile a un parametro che prevede un riferimento, è necessario digitare eseguire il cast della variabile come riferimento.
Nota
Le parentesi quadre e le parentesi sono entrambe obbligatorie.
$var = 10
Test -data ([ref]$var)
$var
3
Passaggio di riferimenti ai metodi .NET
Alcuni metodi .NET possono richiedere di passare una variabile come riferimento. Quando la definizione del metodo usa le parole chiave in
, out
o ref
in un parametro , prevede un riferimento.
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
Il TryParse
metodo tenta di analizzare una stringa come numero intero. Se il metodo ha esito positivo, restituisce $true
e il risultato viene archiviato nella variabile passata per riferimento.
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
Riferimenti e ambiti
I riferimenti consentono di modificare il valore di una variabile nell'ambito padre all'interno di un ambito figlio.
# 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
È stata modificata solo la variabile del tipo di riferimento.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per