.net 中Enum作为permission值使用

.net 中枚举一般有两种用法, 一:表示唯一的元素序列; 2:表示多种复合状态. 这个时候一般为枚举加上[Flags]特性标记为位域, 这样可以用"或"运算符组合多个状态

[Flags]
public enum Permission{
    create = 1,
    read = 2,
    update = 4,
    delete = 8
}
  • 1、枚举创建,并赋值
Permission permission = Permission.create | Permission.read | Permission.update | Permission.delete;
Console.WriteLine("1、枚举创建,并赋值……");
((int)permission).Dump("(int)permission)");
permission.ToString().Dump("permission.ToString()");

比较判断

((permission & Permission.create) == Permission.create).Dump();//true
((permission & Permission.read) == Permission.read).Dump();//true
((permission & Permission.update) == Permission.update).Dump();//true
((permission & Permission.delete) == Permission.delete).Dump();//true
  • 2、通过数字字符串转换
permission = (Permission)Enum.Parse(typeof(Permission),"5");//create, read, update, delete
Console.WriteLine("2、通过数字字符串转换……");
permission.ToString().Dump("(Permission)Enum.Parse(typeof(Permission),\"5\")");//create, update
((int)permission).Dump("(int)permission");
  • 3、通过枚举名称字符串转换
permission = (Permission)Enum.Parse(typeof(Permission),"update,delete,read",true);
Console.WriteLine("3、通过枚举名称字符串转换……");
permission.Dump("permission");
  • 4、直接用数字强制转换
permission = (Permission)7;
Console.WriteLine("4、直接用数字强制转换……");
permission.Dump("permission");
  • 5、去掉一个枚举项
permission = permission & ~Permission.read;
Console.WriteLine("5、去掉一个枚举项……");
permission.Dump("permission");
  • 6、加上一个枚举项
permission = permission|Permission.delete;
Console.WriteLine("6、加上一个枚举项……");
permission.Dump("permission");

//在数据库中判断 , 下面的sql语句同样可以判断多个权限

 "AND (@permission IS NULL OR @permission=0 OR permission &@permission =@permission)"

注: 本人c#代码中部分使用了LinqPad工具, Dump为该工具打印输出的语法,类似Console.WriteLine, 特此说明.

你可能感兴趣的:(.net 中Enum作为permission值使用)