检查if条件中多个变量的相等性的常用方法如下:
public enum Values
{
Value1,
Value2,
Value3
}
void MethodName (Values randomValue )
{
if (randomValue == Values.Value1|| randomValue == Values.Value2)
{
// code here
}
}
不是有一个 OR 条件,有没有更好的方法呢?
答案 0 :(得分:7)
一些选择:
if (randomValue & (Values.Value1 | Values.Value2) > 0)
{
//...
}
switch (randomValue)
{
case Values.Value1:
case Values.Value2:
{
//Do something
break;
}
case Values.Value3:
//Do something else
break;
default:
break;
}
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){
}