c# - 基于多个 bool 条件的返回值

标签 c# .net

我有以下情况:

enum values{
go = 1,
stand = 2,
jump = 3,
run = 4,
go_stand=5,
go_jump=6,
go_run=7,
go_stand_jump=8,
… and so on 
Go_stand_jum_prun=17}

int select value(bool go, bool stand, bool jump, bool run)
{
}

基于传递给方法的 bool 值的组合,我需要返回适当的值,这意味着如果 go=true 和其余的 false 如果传入的所有参数都为真,则返回 1 将返回 17,这同样适用于所有之间的组合。我唯一的想法是用很多 if 和 else if 语句来评估可能的组合,这有点丑陋。问题是有没有更优雅的解决方案。

谢谢大家!!!

最佳答案

要实现这一点,您必须修改您的enum

enum values {
    none = 0,
    go =  ( 1 << 0 ), // 1
    stand = ( 1 << 1 ), // 2
    jump =  ( 1 << 2 ), // 4,
    run = ( 1 << 3 ), // 8
    go_jump = go | jump
}

然后在你的方法中:

values GetValues(bool go, bool stand, bool jump, bool run)
{
    values result = values.none;
    if( go )
        result |= values.go;

    if( stand )
        result |= values.stand;

    // and so on...

    return result;
}

关于c# - 基于多个 bool 条件的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569546/

相关文章:

c# - 不能将 2 个后代加入其 parent 的同一集合下

c# - 动态加载 DLL 的优点是什么?

c# - 任务 LongRunning 的副作用?

c# - .net 2.0 中的 SSL 支持

.net - 设置 Form.KeyPreview = true 的缺点?

c# - 银光 4 : How to find source UI element from contextmenu's menuitem_click?

c# - 如何序列化一个对象,其中该对象具有从操作创建的委托(delegate)?

c# - 如何使用 Task 设置最大并发线程数

c# - 在 C# 中使用 vpn 的事件目录身份验证

c# - 数据绑定(bind)后 telerik radgrid 的客户端绑定(bind)未更新