C#如何检查枚举值传递给参数?

我有一个方法接受一个枚举作为参数:

[Flags]
public enum MyEnum
{
  A = 1,
  B = 2,
  C = 3
}

public class MyClass
{
  public MyEnum myEnum;
}

public bool MyMethod(MyClass class, MyEnum enumParam)
{
  // Here I want to check if object class contains some enum values passed as an argument
  // Something like: if(class.myEnum 'contains-one-of-the-items-of enumParam)
}

public void Test()
{
  Myclass class = new MyClass() { myEnum = MyEnum.A };
  MyMethod(class, MyEnum.A | MyEnum.B);
}

我想检查一个对象是否包含一个在方法中作为参数传入的枚举值。


如果您想查看参数中传递的任何值是否在类的myEnum字段中,则可以编写:

public bool MyMethod(MyClass class, MyEnum enum)
{
  // Here I want to check if object class contains some enum values passed as an argument
  // Something like: if(class.myEnum 'contains-one-of-the-items-of enum)
  return (this.myEnum & enum) != 0;
}

这会执行位标志的逻辑“AND”,并且如果enum任何一个标志在myEnum设置,它将返回true

如果你想确保所有的标志都被设置,那么你可以写:

return (this.myEnum & enum) == this.myEnum;

另外请仔细阅读@ØyvindBråthen的回复。 为了使[Flags]工作,你需要确保你的枚举值是2的幂。


作为你使用的标志,这可以帮助你检查是否已经设置了枚举值:[Flags]枚举属性在C#中的含义是什么?


你可以这样写

public bool MyMethod(MyClass class, MyEnum enumParam)
{
  if( (enumParam & MyEnum.A) != 0 ){
    ...
  }
  if( (enumParam & MyEnum.B) != 0 ){
    ...
  }
}

我改变enum enumParam不与enum关键字冲突。

由于您的A,B,C值为1,2,3,因此您的实现也存在问题。 这样你就不能区分A + B = 3和C = 3。 A应该是1,B应该是2,C应该是4(D应该是8等等)

编辑

由于OP的评论而编辑。

public bool MyMethod(MyClass class, MyEnum enumParam)
{
  return Enum.IsDefined(typeof(MyEnum), enumParam);
}
链接地址: http://www.djcxy.com/p/54419.html

上一篇: C# How to check an enum value is passed in a parameter?

下一篇: Why use flags+bitmasks rather than a series of booleans?