$string = $null
[bool]$string
if (!$string) { "string is null or empty" }
$string = ''
[bool]$string
if (!$string) { "string is null or empty" }
$string = 'something'
[bool]$string
if ($string) { "string is not null or empty" }
输出:
False
string is null or empty
False
string is null or empty
True
string is not null or empty
10 回答
除了
[string]::IsNullOrEmpty
之外,为了检查null或empty,您可以显式地或在布尔表达式中将字符串强制转换为布尔值:输出:
请注意,
"if ($str)"
和"IsNullOrEmpty"
测试在所有实例中都不起作用:$ str = 0的赋值对两者都产生错误,并且根据预期的程序语义,这可能会产生意外 .检查长度 . 如果对象存在,则它将具有长度 .
空对象没有长度,不存在,无法检查 .
String对象有一个长度 .
问题是:IsNull或IsEmpty,而不是IsNull或IsEmpty或IsWhiteSpace
我有一个PowerShell脚本,我必须在计算机上运行,所以它没有[String] :: IsNullOrWhiteSpace(),所以我写了自己的 .
以纯PowerShell方式实现此目的的另一种方法是执行以下操作:
这会成功评估null,空字符串和空格 . 我将传递的值格式化为空字符串以处理null(否则,在调用Trim时,null将导致错误 . )然后只评估与空字符串的相等性 . 我想我仍然更喜欢IsNullOrWhiteSpace,但是如果你正在寻找另一种方法,这将是有效的 .
编辑:在无聊的情况下,我玩了一些,并使其更短(虽然更神秘)
要么
取决于你想要做什么
您可以使用
IsNullOrEmpty
静态方法:你们这样做太难了 . PowerShell处理这个非常优雅,例如:
如果它是函数中的参数,您可以使用
ValidateNotNullOrEmpty
验证它,如您在此示例中所示:就个人而言,我不接受空格($ STR3)为“非空” .
当一个只包含空格的变量被传递给一个参数时,通常会错误的是参数值可能不是'$ null',而不是说它可能不是一个空格,一些删除命令可能会删除一个根文件夹而不是一个子文件夹如果子文件夹名称是“空格”,所有的理由是在很多情况下不接受包含空格的字符串 .
我发现这是实现它的最佳方法:
空
空
空! :-)
不是空的