C#标志枚举理解

时间:2015-11-25 07:18:54

标签: enums flags

请帮忙!我试图弄清楚以下代码,但我无法理解它。有人能让我明白吗?特别是这段代码:

MyEnum d2 = (MyEnum)code.

我的代码:

public struct MyStruct
        {
            public bool HaveHours;
            public List<int> Hours;
            public List<int>Mins;
            public MyStruct(string code) : this(((string.IsNullOrEmpty(code) == false) ? long.Parse(code) : -1)) { }

            public MyStruct(long code)
            {

                this.HaveHours = false;
                this.Hours = new List<int>();
                this.Mins = new List<int>();
                if (code != -1)
                {
                    this.HaveHours = true;
                    MyEnum d2 = (MyEnum)code;

                    if ((d2 & MyEnum.h0) == MyEnum.h0) this.Hours.Add(0);

                    if ((d2 & MyEnum.h030) == MyEnum.h030) this.Mins.Add(0);

                    if ((d2 & MyEnum.h1) == MyEnum.h1) this.Hours.Add(1);
                    if ((d2 & MyEnum.h130) == MyEnum.h130) this.Mins.Add(1);

                    if ((d2 & MyEnum.h2) == MyEnum.h2) this.Hours.Add(2);
                    if ((d2 & MyEnum.h230) == MyEnum.h230) this.Mins.Add(2);

                    if ((d2 & MyEnum.h3) == MyEnum.h3) this.Hours.Add(3);
                    if ((d2 & MyEnum.h330) == MyEnum.h330) this.Mins.Add(3);
                }
            }

        }

1 个答案:

答案 0 :(得分:0)

标志枚举基本上用作二进制数(例如100110101),其中每个位都有意义。通过使用MyEnum(我假设),可以通过某些名称(例如h330)访问这些位形式。
当您将长数字转换为枚举时,您将一个数字转换为其二进制标志枚举(这只是您对机器的表示,一切都是二进制)。 其余代码根据枚举值检查某些标志是否打开(位值为1) 希望有所帮助。