提问人:Philosophene 提问时间:8/5/2023 更新时间:8/5/2023 访问量:48
使用引用类型变量
Using reference type variables
问:
可能是星期五将近下午 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
有没有办法正确引用新值?
答:
0赞
Santiago Squarzon
8/5/2023
#1
在第一个示例中,它与(可变类型)具有相同的引用,而在第二个示例中,您通过将字符串与 s 的值(也是不可变字符串)连接起来构造字符串(不可变类型),这意味着它是不可变的。更新 的值不会影响已构造的字符串。$string
$refString
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
评论
$a
$b
$c
[ref]
$arguments = …
$a
$b
$c
$arguments
$x = 1; $s = “value of x is “ + $x; $x = 2; write-host $s