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