检查枚举是否等于由枚举标志组成的枚举值
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()
,但是 none 这些工作。
HasFlags()
returns 只有第一个值 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 isnumeric has flag"
我希望在检查 Numeric
.
时,returns 对于 Number
和 Const
都为真
我想你正在寻找这个:
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");
}
首先,我对这个标题感到非常抱歉,但(对我来说)想出一个合适的标题是不可能的。
问题如下,我有一个枚举,其中一个值由枚举的两个值的标志组成:
[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()
,但是 none 这些工作。
HasFlags()
returns 只有第一个值 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 isnumeric has flag"
我希望在检查 Numeric
.
Number
和 Const
都为真
我想你正在寻找这个:
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");
}