c# - 枚举标志属性 C#

标签 c# enums attributes

我看了一些相同的主题,但没有找到我要找的东西 我应该使用标志枚举标志属性并检查我的数据是否在此枚举的集合之一中 例如,枚举:

[Flags]
private enum MyEnum {
Apple,
Orange,
Tomato,
Potato
Melon,
Watermelon,

Fruit = Apple | Orange,
Vegetable = Tomato | Potato,
Berry = Melon | Watermelon,
}

在方法中我应该检查输入数据。我该怎么做?

private void Checking(string data){
if(MyEnum.Fruit contains data) MessageBox.Show("Fruit");
if(MyEnum.Vegetable contains data) MessageBox.Show("Vegetables");
if(MyEnum.Berry contains data) MessageBox.Show("Berry");
}

应该用什么代替“包含数据”?

更新

private void ZZZ(){
Cheching("Apple");
}

最佳答案

首先,您需要使用 2 的幂序列手动为您的值编号:

[Flags]
private enum MyEnum 
{
  None = 0,   // often useful
  Apple = 1,
  Orange = 2,
  Tomato = 4,
  Potato = 8,
  Melon =  16,
  Watermelon = 32,

  Fruit = Apple | Orange,
  Vegetable = Tomato | Potato,
  Berry = Melon | Watermelon,
}

[Flags] 属性不是绝对必要的,它只控制 ToString() 行为。

要检查 string 是否与您的值匹配,您必须先将其设为枚举:

private void Checking(string data)
{      
    MyEnum v = (MyEnum) Enum.Parse(typeof(MyEnum), data);

    if((MyEnum.Fruit & v) != 0) MessageBox.Show("It's a Fruit"); 
    ...
}

但请注意,像这样使用 Parse() 在 Enum 和字符串之间进行交换是有限制的。

关于c# - 枚举标志属性 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18311001/

相关文章:

c# - CaSTLe DynamicProxy IInterceptor 或 ProxyGenerator 应该缓存吗?

c# - 使用EF中的复合键查询实体列表

java - 如何制作嵌套类别系统?

c++ typedef另一个类的枚举?

sql-server - 从 SQL Server 中的 xml 字段中选择日期列表

c# - 通过套接字加载图像

c# - 如何使用 C# 将数据从我的 API 传输到 Dynamic 365 API

Java 枚举与字符串常量

CSS 字段名属性掩码