Powershell函数参数default:具有类型约束时的奇怪

时间:2013-05-02 19:10:50

标签: powershell

如果我有一个没有类型约束的函数参数:

> function a ($s=$null) {if ($s -eq $null) {Write-Host "HI"} if ($s -eq "") {Write-Host "KK"}}
> a
HI

现在,如果我向其添加类型约束,则$ null的解释方式不同:

> function a ([string]$s=$null) {if ($s -eq $null) {Write-Host "HI"} if ($s -eq "") {Write-Host "KK"}}
> a
KK

我找不到解释这个问题的文档。它也不一致。

1 个答案:

答案 0 :(得分:2)

在您的第一个示例(函数a)中,$s相当于$null - 它确实为空。

在你的第二个例子(函数b)中,因为你将$s转换为[string]个对象,它实际上是一个空String(相当于{{1} }}), [String]::Empty

您可以通过在每个功能中添加以下内容来检查:

$null

只有if($s -eq [String]::Empty){"empty!"}; 会打印b - empty!会将此评估为a

或者,添加:

$false

$s|get-member 实际上会抛出错误 - 如果您运行a,则会产生同样的错误。 $null|get-member会告诉您b$s并列出该类的所有成员。