PowerShell中switch语句case块多枚举值的语法是否存在?
PowerShell枚举多值Switch Case的正确用法
PowerShell原生支持针对枚举的多值case块语法,你之前的代码失效是因为case条件的写法有误——直接写枚举成员名称(比如Apple)会被PowerShell当作字符串处理,而$myFruit是枚举类型实例,字符串与枚举实例的比较不匹配。
正确的写法是在case中使用完整的枚举成员引用,这样比较的是枚举的底层整数值,既保留了枚举的标签特性,又能保持switch的高效性:
enum Fruit { Apple Banana Orange } # 假设$UsrString是用户输入的枚举名称字符串 $myFruit = [Fruit]::$UsrString switch ($myFruit) { [Fruit]::Apple, [Fruit]::Orange { Write-Host "This is an apple or an orange" break } [Fruit]::Banana { Write-Host "This is a banana" break } default { Write-Host "Unknown fruit: $myFruit" break } }
如果觉得完整引用太繁琐,可以提前将枚举成员赋值给变量简化代码:
enum Fruit { Apple Banana Orange } $apple = [Fruit]::Apple $orange = [Fruit]::Orange $banana = [Fruit]::Banana $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 } }
这种写法完全基于枚举的底层整数值进行比较,不会退化为字符串匹配,完美满足你对高效性和枚举标签特性的需求。
内容的提问来源于stack exchange,提问作者BentChainRing
相关产品推荐
相关产品推荐

