这篇文章主要为大家展示了“C#位域有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#位域有什么用”这篇文章吧。
C#位域主要用于.net里面对于某一个事物有多种混合状态时使用,单一的枚举更的在事物只具有单一属性时使用。为了更好的实现混合状态,我们可以在枚举加上C#位域标签。下面的这个就是我们在本文中用到的实例:
[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表示Monday,3表示Monday,Tuesday。我们可以根据数据库里面的值方便获取存储的内容,代码如下:
week = Week.Monday | Week.Tuesday; MessageBox.Show(Convert.ToString((int)week)); week = (Week)Enum.Parse(typeof(Week), "10"); MessageBox.Show(week.ToString());
返回的结果为:3 和 Tuesday,Tursday
获取Description标签内容
我们既然可以给里面的值加上Description,就可以在程序中获取到这个内容,至于用途,大家自己看吧,东西摆出来,大家自己随便怎么用,下面的代码是从网上找到的,内容如下:
/// < summary> /// 从枚举类型和它的特性读出并返回一个键值对 /// < /summary> /// < param name="enumType">Type,该参数的格式为typeof(需要读的枚举类型)< /param> /// < returns>键值对< /returns> public static NameValueCollection GetNVCFromEnumValue(Type enumType) { NameValueCollection nvc = 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) { DescriptionAttribute aa = (DescriptionAttribute)arr[0]; strText = aa.Description; } else { strText = field.Name; } nvc.Add(strText, strValue); } } return nvc; }
以上是“C#位域有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/dev/230887.html