使用引用类型变量

问题描述 投票:0回答:1

可能是周五下午 5 点左右,但我在学习如何在 PowerShell 中使用

[ref]
类型变量时遇到了困难。

以下打印“NotTest”

[ref]$refString = 'Test'
$string = $refString
$refString.Value = 'NotTest'
$string

令我困惑的是,以下内容不会打印 $a、$b 或 $c 的新值:

[ref]$a = 'test'
[ref]$b = 'foo'
[ref]$c = 'bar'
$arguments= "?arg1=" + $a.value + "&arg2=" + $b.value + "&arg3=" + $c.value

$a.Value = 'no'
$b.Value = 'change'
$c.Value = 'Happens'
$arguments

有没有办法正确引用新值?

powershell pass-by-reference
1个回答
0
投票

在第一个示例中

$string
$refString
(可变类型)持有相同的引用,而在第二个示例中,您通过将字符串与 values (也是不可变字符串)连接来构造字符串(不可变类型)您的
PSReference
,这意味着
$arguments
是不可变的。更新
PSReference
的值不会影响构造的字符串。

根据您所拥有的外观和一点猜测,我认为

UriBuilder
HttpUtility.ParseQueryString
就是您所追求的:

if (-not $IsCoreCLR) {
    Add-Type -AssemblyName System.Web
}

$builder = [System.UriBuilder]::new('myurlhere')
$query = [System.Web.HttpUtility]::ParseQueryString('')
$query['args1'] = 'test'
$query['args2'] = 'foo'
$query['args3'] = 'bar'
$builder.Query = $query.ToString()
$builder.Uri.ToString()
# Outputs: http://myurlhere/?args1=test&args2=foo&args3=bar

$query['args1'] = 'changes'
$query['args2'] = 'happen'
$query['args3'] = 'here'
$builder.Query = $query.ToString()
$builder.Uri.ToString()
# Outputs: http://myurlhere/?args1=changes&args2=happen&args3=here
© www.soinside.com 2019 - 2024. All rights reserved.