首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用由Enum标志组成的Enum值检查Enum等于

使用由Enum标志组成的Enum值检查Enum等于
EN

Stack Overflow用户
提问于 2019-11-18 07:31:38
回答 1查看 62关注 0票数 0

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

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

代码语言:javascript
复制
[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中运行的代码:

代码语言:javascript
复制
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数值有标志“。

正如我想要的那样,在针对NumberConst进行Numeric检查时,有一个返回true的条件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 07:51:39

我想你是在找这个:

代码语言:javascript
复制
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");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58909793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档