打开按位枚举

Jon*_*nas 4 powershell

我有一个获取数据的函数,根据一组用户指定的参数对其进行验证,如果它是正确的则输出,并且基于该操作,它可以正常工作.作为函数的进一步发展,我试图转向'标志'的按位枚举,但不能让它像我想要的那样工作.

我想切换枚举并为所有可能的'匹配'运行大小写,但我只在这个值上只有一个直接匹配的情况下获得匹配.IE浏览器.当值为1时,它会运行"牛奶",但如果值为3则不会运行"牛奶"和"面包"情况...我有点假设它试图运行"牛奶,面包"案例.

有没有简单的方法,我没有看到这个?> <

[Flags()] enum Breakfast {

    Nothing = 0
    Milk = 1
    Bread = 2
    Egg = 4
    Bacon = 8
}

$BreakfastFlag = 3


Switch ([Breakfast]$BreakfastFlag){

    Nothing {
    Write-Host "No breakfast was selected" -ForegroundColor White -BackgroundColor Red
    } 

    Milk {
    Write-Host "Milk was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

    Bread {
    Write-Host "Bread was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

    Egg {
    Write-Host "Egg was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

    Bacon {
    Write-Host "Bacon was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

}
Run Code Online (Sandbox Code Playgroud)

Ant*_*lov 6

另一种变体:

[Flags()] enum Breakfast {
    Nothing = 0
    Milk = 1
    Bread = 2
    Egg = 4
    Bacon = 8
}

$BreakfastFlag = 3

Switch ([Breakfast]$BreakfastFlag)
{
    Nothing {
        Write-Host "No breakfast was selected" -ForegroundColor White -BackgroundColor Red
    }

    { $_ -band [Breakfast]::Milk } {
        Write-Host "Milk was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

    { $_ -band [Breakfast]::Bread } {
        Write-Host "Bread was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

    { $_ -band [Breakfast]::Egg } {
        Write-Host "Egg was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }

    { $_ -band [Breakfast]::Bacon } {
        Write-Host "Bacon was selected!" -ForegroundColor White -BackgroundColor DarkGreen
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Milk was selected!
Bread was selected!
>> Script Ended
Run Code Online (Sandbox Code Playgroud)