我想做的事的例子:
enum Fruit {
Apple
Banana
Orange
}
$myFruit = [Fruit]::$UsrString
switch ($myFruit) {
Apple, Orange {
Write-Host "This is an apple or an orange"
break
}
Banana {
Write-Host "This is a banana"
break
}
default {
Write-Host "Unknown fruit: $myFruit"
break
}
}
但是我所做的每一次尝试都没有按预期工作,如果有的话.
我已经搜索过与 Powershell、switch-statements 和 enums 有关的任何内容,但尚未找到答案。
我在 StackOverflow 上查看了这个链接。
只要我使用枚举项的整数值,我就成功使用了“switch -regEx (someEnum)”。然而,这基本上打败了枚举的使用(即标记为整数)。
我的意图 是让开关尽可能高效(即打开简单的 int 值;远离更常见的字符串比较样式 PS 开关使用,只是为了保持性能)。
在 powershell 中枚举使用是否存在多项 case 块语法?
提前感谢您提供任何信息。
switch
声明:
不不支持多个分支条件,但是...
支持使用脚本块(
{ ... }
)作为分支条件,在其中您可以自由执行任何测试,包括多个值,使用automatic$_
变量参考手头的输入值。
因此:
switch ($myFruit) {
{ $_ -in 'Apple', 'Orange' } {
"This is an apple or an orange"
break
}
Banana {
"This is a banana"
break
}
default {
"Unknown fruit: $_"
}
}
注:
正如您在上面
default
分支的 action 脚本块中看到的那样,$_
也引用那里的输入值。
使用
$_
通常更可取,因为 switch
输入值可以是 array(类似列表的集合),在这种情况下,分支被评估 对于每个元素(然后 $_
指的是手头的元素。
使用数组作为输入,在动作脚本块中使用
continue
代替 break
,以便继续处理 下一个元素(break
将阻止处理更多元素)。
请注意,即使将
[Fruit]
枚举值与 strings 进行比较,这种比较仍然有效,因为 PowerShell 可以方便地自动将枚举值与其字符串表示形式相互转换。
switch
中使用脚本块条件,并在其第一个条件中使用 containment operator,例如:
$UsrString = 'Apple'
enum Fruit {
Apple
Banana
Orange
}
$myFruit = [Fruit] $UsrString
switch ($myFruit) {
{ $_ -in 0, 2 } {
Write-Host 'This is an apple or an orange'
break
}
{ $_ -eq 1 } {
Write-Host 'This is a banana'
break
}
# This condition could never be met,
# because casting the enum to a value not present would throw
default {
Write-Host "Unknown fruit: $_"
break
}
}