0

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

> 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

我找不到解释这一点的文档。也不一致。

4

1 回答 1

2

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

在您的第二个示例(函数b)中,因为您要转换$s为一个[string]对象,所以它实际上是一个空的String(相当于[String]::Empty),而不是 $null

您可以通过将以下内容添加到每个函数来检查这一点:

if($s -eq [String]::Empty){"empty!"};

只会b打印empty!-a将评估这个$false

或者,添加以下内容:

$s|get-member

a实际上会抛出一个错误——如果你运行你会得到同样的错误$null|get-memberb将向您显示这$s是 astring并列出该类的所有成员。

于 2013-05-02T19:28:50.537 回答