我想解析.CSV文件中包含的用户值。我不希望我的用户输入“是”或“否”,而是输入“True”或“False”。在每种情况下,我想转换为等效的布尔值:$true
或$false
。理想情况下,我想要一个默认值,所以如果拼错“是或否”,我会返回我的默认值:$true
或$false
。
因此,我想知道除了
之外是否还有一种巧妙的方法if(){} else (){}
答案 0 :(得分:6)
一种方法是switch
声明:
$bool = switch ($string) {
'yes' { $true }
'no' { $false }
}
如果要处理既不是"是"的值,请添加条款default
。也不是":
$bool = switch ($string) {
'yes' { $true }
'no' { $false }
default { 'neither yes nor no' }
}
另一种选择可能是简单的比较:
$string -eq 'yes' # matches just "yes"
或
$string -match '^y(es)?$' # matches "y" or "yes"
如果字符串匹配,这些表达式将评估为$true
,否则评估为$false
。
答案 1 :(得分:5)
啊,powershell的神奇功能,并调用表达式。
function Yes { $true }
function No { $false }
$magicBool = & $answer
注意:这不区分大小写,但不会处理拼写错误
答案 2 :(得分:1)
如果唯一可能的值是"是"和"不"然后可能最简单的方法是
$result = $value -eq 'Yes'
使用拼写错误的值和默认$false
,上面也会这样做。
使用拼写错误的值和默认$true
这将起作用
$result = $value -ne 'No'
答案 3 :(得分:1)
所有这些都是有效的方法。如果你正在寻找一个衬垫,这将验证它是一个可接受的值,并设置为布尔值如果在真正的'价值集。这也会给你一个默认的$ false值。
// change opacity for selected/unselected items
var selectedClass = '.' + selectedCategory;
$items.filter(selectedClass).css({
background: rgba(255,255,255,0.8) //breaks
});
$items.not(selectedClass).css({
opacity: 0.25
});
对于默认的$ true值,你需要这样的东西。
$result = @("true","false","yes","no") -contains $value -and @("true","yes") -contains $value
答案 4 :(得分:0)
如果没有完整的现有代码片段,这样的东西可能是另一条路径,而不是一串IF语句。
注意:这不会处理简单的“Y”或“N”输入,但不区分大小写。因此,您应该能够看到“是”或“是”工作,以及
Bundle bundle = new Bundle();
bundle.extras.putString(key, value);
intent.putExtras(mBundle);
请参阅我对您关于“拼写错误”警告的问题的补充评论。没有特定的限制或要求,这很难编码。
答案 5 :(得分:0)
这就是我做的方式是 - 没有答案:
container.SetPermissions(
new BlobContainerPermissions
{ PublicAccess = BlobContainerPublicAccessType.Blob});
您可以轻松地将“是”和“否”替换为“是”和“否” 这个不区分大小写,并且将匹配有效的缩写。 (Y或N)。 在拼写错误的情况下,它再次询问。是的,我可以在没有递归的情况下完成它,但我很懒。
答案 6 :(得分:0)
以上是很好的解决方案,但我要说的是,整个主题只是证明了Powershell的巨大缺点......
[System.Convert]::ToBoolean("False") -eq $true ?
[System.Convert]::ToBoolean("0") -eq $true ?
真的? 给我一个f-kin休息。