about_Ref
简短说明
介绍如何创建和使用引用类型变量。 可以使用引用类型变量来允许函数更改传递给它的变量的值。
长说明
可以通过引用或按值将变量传递给函数。
按值传递变量时,将传递数据的副本。
在以下示例中,该函数会更改传递给它的变量的值。 在 PowerShell 中,整数是值类型,因此它们按值传递。
因此,$var
的值在函数范围之外保持不变。
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
在以下示例中,会将包含 Hashtable
的变量传递给函数。 Hashtable
是一种对象类型,因此默认情况下,它通过引用传递给函数。
通过引用传递变量时,该函数可以更改数据,并在函数执行后保留该更改。
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
该函数添加了一个新的键值对,该对将保留在函数范围之外。
编写函数以接受引用参数
可以将函数编码为参数作为引用,而不考虑传递的数据类型。 这要求将参数类型指定为 System.Management.Automation.PSReference
或 [ref]
。
使用引用时,必须使用 System.Management.Automation.PSReference
类型的 Value
属性来访问数据。
Function Test([ref]$data)
{
$data.Value = 3
}
若要将变量传递给需要引用的参数,必须键入将变量强制转换为引用。
注意
括号和圆括号都是必需的。
$var = 10
Test -data ([ref]$var)
$var
3
传递对 .NET 方法的引用
某些 .NET 方法可能需要将变量作为引用传递。 当方法的定义对参数使用关键字 in
、 out
或 ref
时,它需要引用。
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
TryParse
方法尝试将字符串分析为整数。 如果方法成功,它将返回 $true
,结果存储在通过引用传递的变量中。
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
引用和范围
引用允许在子作用域内更改父范围内的变量的值。
# 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
仅更改引用类型的变量。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈