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.PSReferenceo [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, outo 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 $truee 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