首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数中的空参数不为Null

函数中的空参数不为Null
EN

Stack Overflow用户
提问于 2015-04-19 09:34:59
回答 2查看 44.6K关注 0票数 8

给定这个基本函数:

代码语言:javascript
复制
Function TestFunction {
    Param ( [int]$Par1, [string]$Par2, [string]$Par3 )
    If ($Par1 -ne $Null) { Write-Output "Par1 = $Par1" }
    If ($Par2 -ne $Null -or $Par2 -ne '') { Write-Output "Par2 = $Par2" }
    If ($Par3 -ne $Null) { Write-Output "Par3 = $Par3" }
}
TestFunction -Par1 1 -Par3 'par3'

...the输出为:

代码语言:javascript
复制
Par1 = 1
Par2 = 
Par3 = par3

即使我没有向$Par2变量传递任何东西,它仍然不是Null或empty。发生了什么,我如何重写语句,使第二个If语句的计算结果为False,并且脚本块不会被执行?

(我添加-or $Par2 -ne ''只是为了测试,使用它和不使用它时,它的行为是一样的。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-19 09:37:38

您的程序中有一个逻辑错误:$Par2将始终不等于$null 不等于''

要修复该逻辑,您应该在此处使用-and而不是-or

代码语言:javascript
复制
If ($Par2 -ne $Null -and $Par2 -ne '') { Write-Output "Par2 = $Par2" }

但是,因为您将$Par2参数强制转换为函数的参数列表中的字符串:

代码语言:javascript
复制
Param ( [int]$Par1, [string]$Par2, [string]$Par3 )
                    ^^^^^^^^

检查$Par2 -ne $Null是不必要的,因为$Par2将始终是string类型(如果不给它赋值,它将被赋值给'')。所以,你应该写下:

代码语言:javascript
复制
If ($Par2 -ne '') { Write-Output "Par2 = $Par2" }

或者,因为''的计算结果为false,所以您可以这样做:

代码语言:javascript
复制
If ($Par2) { Write-Output "Par2 = $Par2" }
票数 13
EN

Stack Overflow用户

发布于 2018-04-11 19:17:13

您可以检查(检查$variablename的值是否为$null ):

if (!$variablename) { Write-Host "variable is null" }

如果您想检查除了$null之外,$variablename是否有任何值:

if ($variablename) { Write-Host "variable is NOT null" }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29724851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档