Bit fields are mainly used in. net when there are multiple mixed states for a thing. A single enumeration is used when the thing only has a single attribute. To better implement the mixed state, we can add the flags label to the enumeration. The following example is used in this article:
[Flags] public Enum week {[description ("Monday")] Monday = 1 <0, [description ("Tuesday")] Tuesday = 1 <1, [description ("Wednesday")] Wednesday = 1 <2, [description ("Thursday")] tursday = 1 <3, [description ("Friday")] friday = 1 <4, [description ("Saturday")] Saturday = 1 <5, [description ("Sunday")] Sunday = 1 <6}
Operators supported by bit Fields
1. "|": calculates the Union set on both sides (elements are added and the same element only appears once)
Week week = Week.Tuesday | Week.Monday | Week.Monday;MessageBox.Show(Convert.ToString(week));
The result of this Code is Monday and Tuesday.
2. "&": Indicates whether one of the two sides is another subset. If it is a subset, otherwise 0 is returned. (if one includes the other, the system returns the contained one. Otherwise, the system returns 0)
week = Week.Monday & week;MessageBox.Show(week.ToString());
And
week = week & Week.Monday;MessageBox.Show(week.ToString());
The results of the above two codes are the same. If the initial values of week are Monday and Tuesday, the returned results are Monday.
3. "^": removes the intersection of the two from the Union (merges two elements together. If two elements have common elements, remove this public element from the merged result)
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());
The two returned results are: Tuesday, Wednesday, Monday, Tuesday, Wednesday, and Sunday.
4. "~" : Indicates the inverse result. I do not know what the returned result should be. I will check it later. It is used together with "&", for example, removing an element.
week = Week.Tuesday | Week.Monday | Week.Wednesday;week = week &(~Week.Monday);MessageBox.Show(week.ToString());
The returned results are Tuesday and Wednesday.
Forward and reverse Conversion
When the above content already exists in the database, we may simply access numbers. For example, 1 indicates Monday, 3 indicates Monday, and Tuesday. We can easily obtain the stored content based on the values in the database. The Code is as follows:
week = Week.Monday | Week.Tuesday;MessageBox.Show(Convert.ToString((int)week));week = (Week)Enum.Parse(typeof(Week), "10");MessageBox.Show(week.ToString());
Returned results: 3 and Tuesday, tursday
Get description tag content
Since we can add description to the value, we can get this content in the program. As for the purpose, let's take a look at it. Let's get something out and use it as needed, the following code is found on the Internet:
/// <Summary> /// read from the enumeration type and its features and return a key-Value Pair /// </Summary> /// <Param name = "enumtype"> type, the format of this parameter is typeof (Enumeration type to be read) </param> // <returns> key-Value Pair </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 )). 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 ;}
Thanks:
Http://blog.csdn.net/collinye/archive/2008/10/07/3027536.aspx
Http://www.cnblogs.com/c2303191/articles/1103475.html