当前位置:  开发笔记 > 编程语言 > 正文

基于多个bool条件返回值

如何解决《基于多个bool条件返回值》经验,为你挑选了2个好方法。

我有以下案例:

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 false 1将返回,同样适用于两者之间的所有组合.唯一的想法我有很多if和else if语句来评估可能的组合,这有点难看.问题是有更优雅的解决方案.

谢谢你们!!!



1> Mateusz..:

要实现这一点,你必须修改你的 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;
}


您应该使用Flags属性.https://msdn.microsoft.com/en-us/library/system.flagsattribute(v=vs.110).aspx

2> 小智..:

您可以使用标志枚举来允许将值组合为单个枚举值.

表示可以将枚举视为位字段; 也就是说,一组标志.

这是一个例子:( Dot Net Fiddle)

using System;

[Flags]
public enum Value
{
    None = 0,
    Go = 1,
    Stand = 2,
    Jump = 4,
    Run = 8
}

public class Program
{
    public static void Main()
    {   
        var value1 = CreateValue(true, false, true, false);
        var value2 = CreateValue(false, true, true, true);

        Console.WriteLine(value1); //Go, Jump
        Console.WriteLine(value2); //Stand, Jump, Run
    }

    public static Value CreateValue(bool go, bool stand, bool jump, bool run)
    {
        var value = Value.None;

        if(go)
            value |= Value.Go;

        if(stand)
            value |= Value.Stand;

        if(jump)
            value |= Value.Jump;

        if(run)
            value |= Value.Run;

        return value;
    }
}

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有