我想我在这里遗漏了一些明显的东西。据我了解,Boolean
只能是0
,$False
,1
或$True
。但是当我尝试其他整数时,它们也被接受为$True
。
当使用其他整数,然后0
或1
时,该函数会抛出错误,表示它不是Boolean
。或者是否可以通过为这4个不同的输入选项添加ValidateSet
的错误处理来解决这个问题?
示例:
Function Test-Bar {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=0)]
[Bool]$Var
)
Write-Host "Yes, you entered a valid boolean: $Var" -ForegroundColor Yellow
}
[INT]$Number = '0'
Test-Bar -Var $Number
[INT]$Number = '1'
Test-Bar -Var $Number
[INT]$Number = '10'
Test-Bar -Var $Number # Incorrect, ten is not a boolean
[INT]$Number = '22'
Test-Bar -Var $Number # Incorrect, twenty two is not a boolean
感谢您的帮助。
答案 0 :(得分:2)
我想[bool]
类型隐式地将任何不是$null
,$false
,0
或空字符串的内容投射为$true
> [bool]$true
True
> [bool]'foo'
True
> [bool]$false
False
> [bool]''
False
> [bool]$null
False
我认为在您的情况下,使用SwitchParameter
中的cmdletbinding
是合适的:
Function Test-Bar {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=0)]
[Switch]$Var
)
Write-Host "Yes, you entered a valid boolean: $Var" -ForegroundColor Yellow
}
并致电:
> Test-Bar -var
Yes, you entered a valid boolean: True
> Test-Bar -var:$false
Yes, you entered a valid boolean: False
您可能还想查看答案on this question,其中讨论了如果您真的需要测试/转换为布尔值的方法。