about_Ref
Description courte
Décrit comment créer et utiliser une variable de type référence. Vous pouvez utiliser des variables de type référence pour permettre à une fonction de modifier la valeur d’une variable qui lui est transmise.
Description longue
Vous pouvez passer des variables à des fonctions par référence ou par valeur.
Lorsque vous passez une variable par valeur, vous transmettez une copie des données.
Dans l’exemple suivant, la fonction modifie la valeur de la variable qui lui est passée. Dans PowerShell, les entiers sont des types valeur afin qu’ils soient passés par valeur.
Par conséquent, la valeur de $var
n’est pas modifiée en dehors de l’étendue de la fonction.
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
Dans l’exemple suivant, une variable contenant un Hashtable
est passée à une fonction. Hashtable
est un type d’objet, par défaut, il est passé à la fonction par référence.
Lors de la transmission d’une variable par référence, la fonction peut modifier les données et cette modification persiste après l’exécution de la fonction.
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
La fonction ajoute une nouvelle paire clé-valeur qui persiste en dehors de l’étendue de la fonction.
Écriture de fonctions pour accepter les paramètres de référence
Vous pouvez coder vos fonctions pour prendre un paramètre comme référence, quel que soit le type de données transmis. Cela nécessite que vous spécifiiez le type de paramètres en tant que System.Management.Automation.PSReference
, ou [ref]
.
Lorsque vous utilisez des références, vous devez utiliser la Value
propriété du System.Management.Automation.PSReference
type pour accéder à vos données.
Function Test([ref]$data)
{
$data.Value = 3
}
Pour passer une variable à un paramètre qui attend une référence, vous devez taper caster votre variable en tant que référence.
Remarque
Les crochets et parenthèses sont obligatoires.
$var = 10
Test -data ([ref]$var)
$var
3
Passage de références à des méthodes .NET
Certaines méthodes .NET peuvent nécessiter que vous transmettiez une variable en tant que référence. Lorsque la définition de la méthode utilise les mot clé in
, out
ou ref
sur un paramètre, elle attend une référence.
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
La TryParse
méthode tente d’analyser une chaîne sous forme d’entier. Si la méthode réussit, elle retourne $true
et le résultat est stocké dans la variable que vous avez passée par référence.
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
Références et étendues
Les références permettent de modifier la valeur d’une variable dans l’étendue parente dans une étendue enfant.
# 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
Seule la variable du type référence a été modifiée.
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour