我有以下案例:
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语句来评估可能的组合,这有点难看.问题是有更优雅的解决方案.
谢谢你们!!!
要实现这一点,你必须修改你的 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; }
您可以使用标志枚举来允许将值组合为单个枚举值.
表示可以将枚举视为位字段; 也就是说,一组标志.
这是一个例子:( 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; } }