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);
}
}
大家还有什么问题,欢迎在下方留言!
如果你有 技术的问题 或 项目开发
都可以加下方联系方式
和我聊一聊你的故事🧡