c# - bitwise combination as integer to enum
问题描述
Currently i'm trying to parse a integer that is a bitwise combination to a enum from a third-party API. For example: i receive a integer
with the value 1035
this value holds three enum values;
enum Status
1= "Status 1"
2= "Status 2"
4= "Status 3"
8= "Status 4"
........
1024= "Status 8"
end enum
So i need a function that converts the value 1035
to Status 1 + Status 2 + Status 4 + Status 8
Tried to convert it to Bit and then use bit shifting but this doesn't give me the right results... Hopefully someone could help me out in C# or vb.net example.
解决方案
如果您将[Flags]
属性应用于枚举,它将使枚举ToString()
返回一个字符串,该字符串指示设置了哪些位 - 但我认为这对您没有那么有用,除了它在记录枚举是标志枚举。
但是,无论该[Flags]
属性是否存在,Enum.HasFlag()
都会告诉您是否设置了标志。
这个示例控制台应用程序应该清楚:
using System;
namespace Demo
{
[Flags]
enum Status
{
None = 0,
Status1 = 1,
Status2 = 2,
Status3 = 4,
Status4 = 8,
Status5 = 16,
Status6 = 32,
Status7 = 64,
Status8 = 128,
Status9 = 256,
Status10 = 512,
Status11 = 1024
}
class Program
{
static void Main()
{
Status s = (Status)1035;
Console.WriteLine(s); // "Status1, Status2, Status4, Status11"
if (s.HasFlag(Status.Status4)) // "Status 4 is set"
Console.WriteLine("Status4 is set");
else
Console.WriteLine("Status4 is not set");
if (s.HasFlag(Status.Status3)) // "Status 3 is not set"
Console.WriteLine("Status3 is set");
else
Console.WriteLine("Status3 is not set");
}
}
}
注意:您的枚举似乎缺少一些值!1024 值应该是 Status11,而不是 Status8。
另请注意,我为完整性添加了“无”值。