C# enum Flags

目录

正常的enum

加上Flags注解的enum

原理

判断

其他


C#的enum枚举值,可以在定义时加上[Flags]注解。加上注解之后表示枚举值可以多个进行组合使用。

 

正常的enum

public enum UserType{
无=0,
管理员=1,
组长=2,
组员=3,
外包=4
}

加上Flags注解的enum

[Flags]
public enum UserType{
无=0,
管理员=1,
组长=2,
组员=4,
外包=8
}

原理

注意Flags的枚举值是1 2 4 8,因为组合使用判断是用与或非操作,所以需要数据格式1 2 4 8 16等

0000 0001

0000 0010

0000 0100

2进制 与或非 不详细说了

判断

进行判断的代码如下

UserType admins = UserType.管理员 | UserType.组长;
if ((UserType.组员 & admins)==0){
    Console.WriteLine("组员不属于管理组");
}
if ((UserType.管理员 & admins)!=0){
    Console.WriteLine("管理员属于管理组");
}

数组转换

webapi项目中,前端多选框传递的数据一般是数组,

请求时需要数组转Enum,

UserType userType=UserType.无;
if(TypeArr.Length!=0){
    foreach(var item in TypeArr){
        userType|=(UserType)item;
    }
}

返回时需要Enum转数组。

//数据库获取到用户枚举值userType
var typeEnumArr=Enum.GetValues(typeof(UserType));
List typeList=new List();
foreach(var item in typeArr){
    if((UserType)item & userType !=0){
        typeList.Add((int)item);
    }
}
int[] typeArr=typeList.ToArray();

 

你可能感兴趣的:(C#,c#,enum,枚举类)