(编辑) 一个空函数实际上确实返回一个null,有些东西让我误入歧途,把问题留在这里作为提醒......
$ null不会削减它。我的场景最简单的解释为一个片段,我有一个人写的函数
function PositiveInt([string]$value) {
if ([int]($value) -ge 0) {[int]$value}
}
如果输入不是数字字符串,则在否定情况下不返回任何内容或抛出。如何在否定的情况下测试回报?我试过这个
if ($null -eq (PositiveInt -1)) {
write-host "not positive :)"
}
但它显然不起作用,因为没有返回值不等于$ null。如何测试函数或表达式是否根本不返回任何内容?不要尝试修复我的设法功能,它缺少“$ empty”(原文如此)我想做一个测试,但不能因为powershell绑定不强制函数甚至表达式实际上都返回任何东西?
# hacky unclear solution proposed
$temp = @(PositiveInt -1)
if ($temp.length -eq 0) {
write-host "not positive :)"
}
我从这篇In Powershell what is the idiomatic way of converting a string to an int?帖子中汲取了一些灵感。但是我相信我会问一个不同的问题。 除了转换到数组解决方法之外,还有更简洁的方法吗?
(编辑) 必须承认环境或实际代码上下文正在发挥作用,在PS 5.1中,函数调用返回$ null,因为@AnsgarWiechers指出。
答案 0 :(得分:2)
您可以使用-is
or -isnot
type operators检查结果是否成功转换为整数:
if( (PositiveInt '-1') -isnot [int] ) {
write-host 'negative'
}
答案 1 :(得分:1)
您可以尝试以下方法:
if ((PositiveInt -1) -eq $null) {
write-host "not positive :)"
}
答案 2 :(得分:0)
if ( [string]::IsNullOrEmpty( (PositiveInt -1) ) ) {
write-host "not positive :)"
}