Compartir a través de


about_Ref

Descripción breve

Describe cómo crear y usar una variable de tipo de referencia. Puede usar variables de tipo de referencia para permitir que una función cambie el valor de una variable que se le pasa.

Descripción larga

Puede pasar variables a funciones por referencia o por valor.

Cuando se pasa una variable por valor, se pasa una copia de los datos.

En el ejemplo siguiente, la función cambia el valor de la variable que se le pasa. En PowerShell, los enteros son tipos de valor, por lo que se pasan por valor. Por lo tanto, el valor de $var no se modifica fuera del ámbito de la función.

Function Test($data)
{
    $data = 3
}

$var = 10
Test -data $var
$var
10

En el ejemplo siguiente, se pasa una variable que contiene Hashtable a una función . Hashtable es un tipo de objeto, por lo que de forma predeterminada se pasa a la función por referencia.

Al pasar una variable por referencia, la función puede cambiar los datos y ese cambio persiste después de que se ejecute la función.

Function Test($data)
{
    $data.Test = "New Text"
}

$var = @{}
Test -data $var
$var
Name                           Value
----                           -----
Test                           New Text

La función agrega un nuevo par clave-valor que persiste fuera del ámbito de la función.

Escritura de funciones para aceptar parámetros de referencia

Puede codificar las funciones para tomar un parámetro como referencia, independientemente del tipo de datos pasados. Esto requiere que especifique el tipo de parámetros como System.Management.Automation.PSReference, o [ref].

Al usar referencias, debe usar la Value propiedad del System.Management.Automation.PSReference tipo para acceder a los datos.

Function Test([ref]$data)
{
    $data.Value = 3
}

Para pasar una variable a un parámetro que espera una referencia, debe escribir la variable como referencia.

Nota:

Los corchetes y paréntesis son obligatorios.

$var = 10
Test -data ([ref]$var)
$var
3

Pasar referencias a métodos de .NET

Algunos métodos de .NET pueden requerir que pase una variable como referencia. Cuando la definición del método usa las palabras clave in, outo ref en un parámetro , espera una referencia.

[int] | Get-Member -Static -Name TryParse
Name     MemberType Definition
----     ---------- ----------
TryParse Method     static bool TryParse(string s, [ref] int result)

El TryParse método intenta analizar una cadena como un entero. Si el método se realiza correctamente, devuelve $truey el resultado se almacena en la variable que ha pasado por referencia.

PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15

Referencias y ámbitos

Las referencias permiten cambiar el valor de una variable en el ámbito primario dentro de un ámbito secundario.

# 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

Solo se cambió la variable del tipo de referencia.

Consulte también