Powershell隐式类型转换

时间:2017-09-13 08:50:13

标签: powershell powershell-v3.0

我有以下的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

列表

发生了什么事?

1 个答案:

答案 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 ','