繁体   English   中英

检查 Enum 是否等于由 Enum 标志组成的 Enum 值

[英]Check for Enum equals with Enum value composed from Enum flags

首先,我对这个标题感到非常抱歉,但(对我来说)想出一个合适的标题是完全不可能的。

问题如下,我有一个枚举,其中一个值由枚举的两个值的标志组成:

[Flags]
Enum TknType : byte
{
   Number = 0x01,
   Constant = 0x02,
   Numeric = Number | Constant, // 0x03
   BinaryOpr = 0x04,
   UnaryOpr = 0x05,
   Function = 0x06
   //and so on an so forth
}

我想检查标记是否为数字,但标记要么是数字,要么是常数。 我怎样才能最好地做到这一点?

我厌倦了 dotnetfiddle 中的HasFlags()Equals() ,但这些都不起作用。 HasFlags()仅返回第一个值Number 这是我在 dotnetfiddle 中运行的代码:

var tt = TknType.Number;
var tt2 = TknType.Const;
if (tt == TknType.Numeric)
{
   Console.WriteLine("tt isnumeric equals");
}
if (tt2 == TknType.Numeric)
{
   Console.WriteLine("tt2 isnumeric equals");
}
if (TknType.Numeric.HasFlag(tt))
{
   Console.WriteLine("tt isnumeric has flag");
}
if (TknType.Number.HasFlag(tt2))
{
   Console.WriteLine("tt2 isnumeric has flag");
}

output 是“tt isumeric has flag”

我希望有一个条件,在检查Numeric时对NumberConst都返回 true 。

我想你正在寻找这个:

var test = TknType.Numeric;

if ((test & TknType.Numeric) == TknType.Numeric) 
{
    Console.WriteLine("Test has Numeric flag");
} 
else if ((test & TknType.Number) == TknType.Number) 
{
    Console.WriteLine("Test has Number flag");
}
else if ((test & TknType.Constant) == TknType.Constant) 
{
    Console.WriteLine("Test has Constant flag");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM