首先,我对这个头衔感到非常抱歉,但想出一个合适的标题(对我来说)是不可能的。
问题如下,我有一个Enum,其中一个值由Enum的两个值的标志组成:
[Flags]
Enum TknType : byte
{
Number = 0x01,
Constant = 0x02,
Numeric = Number | Constant, // 0x03
BinaryOpr = 0x04,
UnaryOpr = 0x05,
Function = 0x06
//and so on an so forth
}我想检查一个令牌是否是数字,但是标记要么是数字,要么是常量。我该怎么做呢?
我厌倦了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");
}输出是"tt is数值有标志“。
正如我想要的那样,在针对Number和Const进行Numeric检查时,有一个返回true的条件。
发布于 2019-11-18 07:51:39
我想你是在找这个:
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");
}https://stackoverflow.com/questions/58909793
复制相似问题