如何检查至少一个枚举值是否等于if条件中的变量

时间:2016-05-31 03:13:44

标签: c# enums

检查if条件中多个变量的相等性的常用方法如下:

public enum Values
{
    Value1,
    Value2,
    Value3
}
void MethodName (Values randomValue )
{
 if (randomValue == Values.Value1|| randomValue == Values.Value2)
  {
       // code here
  }
}

不是有一个 OR 条件,有没有更好的方法呢?

3 个答案:

答案 0 :(得分:7)

一些选择:

  1. 您可以将枚举定义为flags。这意味着每个值必须是2的幂(1,2,4,8等)。然后,你可以写:
  2. if (randomValue & (Values.Value1 | Values.Value2) > 0)
    {
         //...
    }
    
    1. 您可以使用开关
    2. switch (randomValue)
      {
          case Values.Value1:
          case Values.Value2:
          {
              //Do something
              break;
          }
          case Values.Value3:
              //Do something else
              break;
          default:
              break;
      }
      
      1. 您可以使用数组(如果您有要搜索的预定义值集,则更好。)
      2. if (new[] { Values.Value1, Values.Value2 }.Contains(randomValue))
        {
        }
        

        static(?) readonly Values[] allowedValues = new[] { Values.Value1, Values.Value2 };
        
        void MethodName(Values randomValue)
        {
            if (allowedValues.Contains(randomValue))
            {
                //...
            }
        }
        

答案 1 :(得分:0)

通过使用Enum Flags,我们可以按如下方式进行比较:

[Flags]
public enum Values
{
  Value1 = 1 << 0,
  Value2 = 1 << 1,
  Value3 = 1 << 2
}

void MethodName(Values randomValue)
{
  if ((randomValue & (Values.Value1 | Values.Value2)) != 0)
  {
    // code here
  }
}

注意Flags属性和Enum值所需的位移。 Enum值也可以定义为:

  [Flags]
  public enum Values
  {
    Value1 = 1,
    Value2 = 2,
    Value3 = 4
  }

我们现在可以按如下方式参数化允许值:

      [Flags]
      public enum Values
      {
        Value1 = 1 << 0,
        Value2 = 1 << 1,
        Value3 = 1 << 2
      }    

      void MethodName(Values randomValue)
      {
        if (IsValid(randomValue, Values.Value1 | Values.Value2))
        {
          // code here
        }
      }

      bool IsValid(Values randomValue, Values allowedValues)
      {
        return ((randomValue & (allowedValues)) != 0);
      }

答案 2 :(得分:-2)

参见此示例

公共枚举级别 {

HIGH,
MEDIUM,
LOW

}

你可以像这样引用上面枚举中的常量:

等级=等级。高;

等级= ... //为其指定一些等级常数

if(level == Level.HIGH){

}否则if(level == Level.MEDIUM){

} else if(level == Level.LOW){

}