很多朋友认为设置枚举还不容易,如以下代码就OK了,
public enum Test
{
/// <summary>
/// 拒绝
/// </summary>
Deny = 0,
/// <summary>
/// 删除
/// </summary>
Del = 1,
/// <summary>
/// 修改
/// </summary>
Modify = 2,
/// <summary>
/// 添加
/// </summary>
Add = 3,
/// <summary>
/// 查询
/// </summary>
Search = 4
}
我们看看上面的代码,这样的设置的确没错,但确没有考虑到一个复用性的效果。
很多时候,我们能够看到WINDOW的一个枚举能够并用,如:Test t=Test.Add|Test.Del,等等
那么我们怎么样才能设置这样的枚举呢?下面我们来看一段枚举代码:
[Flags]
public enum Popendom : int
{
/// <summary>
/// 拒绝
/// </summary>
Deny = 1,
/// <summary>
/// 删除
/// </summary>
Del = 2,
/// <summary>
/// 修改
/// </summary>
Modify = 4,
/// <summary>
/// 添加
/// </summary>
Add = 8,
/// <summary>
/// 查询
/// </summary>
Search = 16
}
1、[Flags]
在C#的枚举中:Flags属性很重要,因为她可以将你的枚举中的类型转成字符串。
2、public enum Popendom : int
这个枚举继承的int类型,也就是起到约束的作用。
3、枚举设置值,很多认为里面的值是可以随意设置的,但其实里面有个设置技巧,视项目的需求不同的。
在设置可并用的枚举我们需要一个原则就是累加值不能在枚举设置值中出现
Deny =1,Del = 2,Modify = 4等等
(0)+1=1,
1+2=(3)
1+2+4=(7)
(值)不能在枚举中出现。也就是I*2
这样我们就能实现了
Popendom p=Popendom.Del|Popendom.Add|Popendom.Modify等等了。
public MainPage()
{
InitializeComponent();
Popendom ps = Popendom.Add | Popendom.Del | Popendom.Modify | Popendom.Search | Popendom.Deny;
IList<Popendom> list = GetPopendomList(ps.ToString());
bool b = HasThisPopendom(ps.ToString(), Popendom.Del);
}
[Flags]
public enum Popendom : int
{
/// <summary>
/// 拒绝
/// </summary>
Deny = 1,
/// <summary>
/// 删除
/// </summary>
Del = 2,
/// <summary>
/// 修改
/// </summary>
Modify = 4,
/// <summary>
/// 添加
/// </summary>
Add = 8,
/// <summary>
/// 查询
/// </summary>
Search = 16
}
public enum Test
{
/// <summary>
/// 拒绝
/// </summary>
Deny = 0,
/// <summary>
/// 删除
/// </summary>
Del = 1,
/// <summary>
/// 修改
/// </summary>
Modify = 2,
/// <summary>
/// 添加
/// </summary>
Add = 3,
/// <summary>
/// 查询
/// </summary>
Search = 4
}
public IList<Popendom> GetPopendomList(string popendoms)
{
List<Popendom> list = new List<Popendom>();
string[] ps = GetPopendoms(popendoms);
foreach (string p in ps)
{
switch (p)
{
case "Deny": list.Add(Popendom.Deny); break;
case "Del": list.Add(Popendom.Del); break;
case "Modify": list.Add(Popendom.Modify); break;
case "Add": list.Add(Popendom.Add); break;
case "Search": list.Add(Popendom.Search); break;
}
}
return list;
}
public bool HasThisPopendom(string popendoms, Popendom p)
{
return GetPopendoms(popendoms).Contains(p.ToString());
}
public string[] GetPopendoms(string popendoms)
{
return popendoms.Replace(" ", "").Split(',');
}