我有以下的powershell代码,添加到ArrayList。 当我ToString()和对象并将其值放在列表中,然后执行-join时出错了。
$list = New-Object System.Collections.ArrayList
foreach($key in $keyList)
{
$value = $dict[$key]
$value.GetType() # Foo.Bar.SomeObject
$stringValue = $value.ToString()
$stringValue.GetType() # System.String
$stringValue # Outputs the actual value eg. John Doe
$list.Add($stringValue)
}
$list -join "," # Outputs Foo.Bar.SomeObject,Foo.Bar.SomeObject,Foo.Bar.SomeObject,Foo.Bar.SomeObject
使用$list.Add("$value")
工作正常。导致$list -join ","
输出预期的John Doe,68,1292
发生了什么事?
答案 0 :(得分:0)
我对您如何定义 Foo.Bar.SomeObject
感兴趣。我很确定 Object.ToString()
的默认实现是打印出类型,如您所见,但奇怪的是 "$value"
正在工作...
另一方面,您可以清理代码以使其更具 PowerShell 风格,这可能有助于清理某些内容。
ToString:
$list = $keyList | ForEach-Object {$dict.$key.ToString()}
$list -join ','
字符串格式
$list = $keyList | ForEach-Object {"$($dict.$key)"}
$list -join ','
PowerShell 适用于强类型,但您通常可以不使用它(这是它最大的优势之一)。您很少需要显式调用方法。如果您对正在使用的类型感到担心,可以考虑这样做:
[System.Collections.ArrayList]$list = $keyList | ForEach-Object {"$($dict.$key)"}
$list -join ','