将“是”或“否”转换为布尔值

时间:2016-03-29 16:37:38

标签: powershell boolean boolean-expression

我想解析.CSV文件中包含的用户值。我不希望我的用户输入“是”或“否”,而是输入“True”或“False”。在每种情况下,我想转换为等效的布尔值:$true$false。理想情况下,我想要一个默认值,所以如果拼错“是或否”,我会返回我的默认值:$true$false

因此,我想知道除了

之外是否还有一种巧妙的方法
if(){} else (){}

7 个答案:

答案 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休息。