C# 位域[flags]

     位域主要用于.net里面对于某一个事物有多种混合状态时使用,单一的枚举更的在事物只具有单一属性时使用。为了更好的实现混合状态,我们可以在枚举加上Flags标签。下面的这个就是我们在本文中用到的实例:

[Flags]

public enum Week

{

[Description("星期一")]

Monday = 1<< 0,

[Description("星期二")]

Tuesday = 1<< 1,

[Description("星期三")]

Wednesday = 1<< 2,

[Description("星期四")]

Tursday = 1<< 3,

[Description("星期五")]

Friday = 1<< 4,

[Description("星期六")]

Saturday = 1<< 5,

[Description("星期日")]

Sunday = 1<< 6

}

位域支持的运算符

1. “|”:表示两边求并集(元素相加,相同元素只出现一次)

Week week = Week.Tuesday| Week.Monday | Week.Monday;

MessageBox.Show(Convert.ToString(week));

这段代码的结果就是 Monday,Tuesday

2. “&”:表示两边是否其中一个是另外一个的子集,如果是返回子集,否则返回0(如果其中一个包含另外一个,返回被包含的,否则返回0

week = Week.Monday & week;

MessageBox.Show(week.ToString());

week = week & Week.Monday;

MessageBox.Show(week.ToString());

上面这两段代码的结果是相同的,如果week的初始值为:Monday,Tuesday,返回的结果为:Monday

3.“^”:表示从两者的并集中去除两者的交集(把两个的元素合并到一起,如果两个中有公共元素,要将这个公共元素从合并的结果中去除)

week = (Week.Monday | Week.Wednesday)^ (Week.Tuesday| Week.Monday);

MessageBox.Show(week.ToString());

week = (Week.Monday | Week.Wednesday) ^ (Week.Tuesday| Week.Sunday);

MessageBox.Show(week.ToString());

上面两个返回的结果应该为:Tuesday,Wednesday Monday,Tuesday,Wednesday,Sunday

4.“:表示取反,返回的结果我还不知道应该是什么,以后再查一下。用法主要和“&”一起使用,例如:去除其中的某个元素

week = Week.Tuesday | Week.Monday | Week.Wednesday;

week = week&(~Week.Monday);

MessageBox.Show(week.ToString());

上面返回的结果为:Tuesday,Wednesday

正逆转化

      上面的内容存在数据库时我们可能为了简单只存取数字即可,例如:1表示Monday3表示MondayTuesday。我们可以根据数据库里面的值方便获取存储的内容,代码如下:

week = Week.Monday  | Week.Tuesday;

MessageBox.Show(Convert.ToString((int)week));

week = (Week)Enum.Parse(typeof(Week), "10");

MessageBox.Show(week.ToString());

返回的结果为:3 TuesdayTursday

获取Description标签内容

我们既然可以给里面的值加上Description,就可以在程序中获取到这个内容,至于用途,大家自己看吧,东西摆出来,大家自己随便怎么用,下面的代码是从网上找到的,内容如下:

/// <summary>

/// 从枚举类型和它的特性读出并返回一个键值对

///</summary>

/// <paramname="enumType">Type,该参数的格式为typeof(需要读的枚举类型)</param>

/// <returns>键值对</returns>

public static NameValueCollection GetNVCFromEnumValue(Type enumType)

{

NameValueCollectionnvc = new NameValueCollection();

Type typeDescription = typeof(DescriptionAttribute);

System.Reflection.FieldInfo[] fields = enumType.GetFields();

string strText = string.Empty;

string strValue = string.Empty;

foreach (FieldInfo field in fields)

{

if (field.FieldType.IsEnum)

{

strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();

object[] arr =field.GetCustomAttributes(typeDescription, true);

if (arr.Length > 0)

{

DescriptionAttributeaa = (DescriptionAttribute)arr[0];

strText =aa.Description;

}

else

{

strText =field.Name;

}

nvc.Add(strText,strValue);

}

}

return nvc;

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值