[英]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
时对Number
和Const
都返回 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.