PowerShell类重载string []视为字符串

时间:2019-05-03 16:30:11

标签: powershell

我有一个带有重载构造函数的类:

MyClass([string] foo) { Write-Host "1" }

MyClass([string[]] bar) { Write-Host "2" }

当我运行以下命令时:

[MyClass]::new(@("my value"))

Id期望输出为“ 2”。相反,我得到“ 1”。我想念什么?

1 个答案:

答案 0 :(得分:4)

这是因为您没有传递字符串数组。您正在传递对象数组。由于未明确定义对象数组,因此它将尝试使用第一个构造函数对其进行解释。

使用:

"dynamodb.table.name": "ddb-table",
"dynamodb.column.mapping": "col:col",
"storage_handler": "org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler"

例如:

class MyClass{
MyClass([string] $foo) { Write-Host "1 $foo" }
MyClass([string[]] $bar) { Write-Host "2 $($bar)" }
}

如果您将其明确定义为字符串数组,则它将按预期工作:

PS C:\> $myValue = @("myvalue")
PS C:\> $myValue.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS C:\> [MyClass]::new($myValue)
1 myvalue