C#枚举Flag属性的应用

C#枚举Flag属性的应用

1、普通枚举

直接上代码:

using System;
using static System.Console;
namespace FirstDotnetCorePro
{
    class Program
    {
        static void Main(string[] args)
        {
            DaysOfWeek weekday = DaysOfWeek.Saturday | DaysOfWeek.Sunday;
            WriteLine(weekday);
        }
    }

    public enum DaysOfWeek
    {
        Monday = 0b1,
        Tuesday = 0b10,
        Wednesday = 0b100,
        Thursday = 0b1000,
        Friday = 0b10000,
        Saturday = 0b100000,
        Sunday = 0b1000000,
    }
}

如果将上述代码执行则在控制台会输出:96。因为枚举类型也是值类型,当进行或操作的时候实际上是对应的数值进行了或运算,所以得到结果5。

如果我们将枚举类型添加Flags属性呢???

2、Flags属性枚举

我们将上述代码做如下修改:

    [Flags]
    public enum DaysOfWeek
    {
        Monday = 0b1,
        Tuesday = 0b10,
        Wednesday = 0b100,
        Thursday = 0b1000,
        Friday = 0b10000,
        Saturday = 0b100000,
        Sunday = 0b1000000,
    }

则会在控制台输出:Saturday, Sunday。这是因为添加了Flags属性的原因,枚举值可以直接进行或运算(或者与运算),不需要转换为数值进行运算,所以在控制台输出的还是枚举值。

3、应用

思考:加上Flags属性后,如果有一个整型值,并且该值不是该枚举类型中的某一个常量值,那么还可以转换成该枚举类型吗???

在Main函数中,我们执行这样的代码:

        static void Main(string[] args)
        {
           WriteLine((DaysOfWeek)96);
        }

那么在控制会输出:Saturday, Sunday 。

如果我们定义一个枚举类型用于表示错误类型,即一个int类型的值中每一个比特位为1的时候都对应着一个错误类型,如果我们知道了那个int值,那么我们就可以立马知道有哪些错误了。

如果我们定义了如下的错误码:

    [Flags]
    public enum ErrorCode
    {
        Error1=0x1,
        Error2=0x2,
        Error3=0x4,
        Error4=0x8,
        Error5=0x10,
        Error6=0x20,
        Error7=0x40,
    }

那么当我们收到一个错误码值的时候们就可以快速知道包含哪些错误:

    class Program
    {
        static void Main(string[] args)
        {
           WriteLine((ErrorCode)108);
        }
    }

执行上述代码会在控制台中会输出:Error3, Error4, Error6, Error7 。

你可能感兴趣的:(.Net/C#基础,c#,.net)