认真CS☀️枚举-[Flags]特性-HasFlag、ToString、比较、GetName&GetNames

发布于:2022-12-20 ⋅ 阅读:(324) ⋅ 点赞:(0)

在这里插入图片描述

 

using System;


[Flags]
enum MyEnum
{
    e1=1,
    e2=2,
    e3=4,
    e4=8,
 //   e5=3           在没有[Flags]情况下,0001|0010=0011=3,而值没有3,所以实际输出3.如果取消左侧的斜杠,则有3了,则输出e5
}                  //如果有[Flags],则告诉HasFlag()、ToString()运算符,方法位可以分开考虑,标志字组合拆分成组员的结果。
enum MyEnum2
{
    e1=8
}


class MyClass
{
    bool s1, s2, s3, s4, s5;    //在这儿声明了bool,在下面方法内便不可再声明了,否则方法内的会覆盖方法外的。


    public void SetOption(MyEnum ops)
    {
        s1 = ops.HasFlag(MyEnum.e1);
        s2= ops.HasFlag(MyEnum.e2);
        s3 = ops.HasFlag(MyEnum.e3);
        s4 = ops.HasFlag(MyEnum.e4);


        MyEnum test = MyEnum.e1 | MyEnum.e2;
        bool s5 = ops.HasFlag(test);
    }


    public void PrintOption()
    {
        Console.WriteLine("e1 is {0}\ne2 is {1}\ne3 is {2}\ne4 is {3}\ne5 is {4}", s1, s2, s3, s4, s5);
        MyEnum opst = MyEnum.e1 | MyEnum.e2;
        Console.WriteLine(opst.ToString());
    }
}


class Program
{
    static void Main()
    {
        MyClass mc = new MyClass();
        MyEnum ops = MyEnum.e1 | MyEnum.e2;
        mc.SetOption(ops);
        mc.PrintOption();


        Console.WriteLine("{0}\n",ops);


        string st;
        Console.WriteLine("{0}\n", st= (int)MyEnum.e1<(int)MyEnum2.e1    
            ? "YES"                   //无法直接比较,即无法比较不同枚举成员的字面量,必须先转化为常数才可比较。
            : "NO");


        Console.WriteLine("{0}\n", Enum.GetName(typeof(MyEnum),1));


        foreach (var name in Enum.GetNames(typeof(MyEnum)))
        Console.Write("{0} ",name);
    }
    
    
}

 

大家还有什么问题,欢迎在下方留言!


 

在这里插入图片描述


如果你有 技术的问题 或 项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

 

 


网站公告

今日签到

点亮在社区的每一天
去签到