首页 > 解决方案 > 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.

标签: c#vb.netmathlogicbit

解决方案


如果您将[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。

另请注意,我为完整性添加了“无”值。


推荐阅读