Enum provides a base class for enumeration. The base type can be any integer except Char. If the basic type is not explicitly declared, Int32 is used. Programming Languages generally provide syntax to declare an enumeration consisting of a group of named constants and their values.
Note: The base type of the enumeration type is any integer except Char, so the enumerated value is an integer value.
Enum provides some practical static methods:
(1) method for comparing enumeration instances
(2) method of converting the Instance value to its String Representation
(3) how to convert the string representation of a number to an instance of this class
(4) Create an instance with the specified enumeration value.
Example: enum Colors {Red, Green, Blue, Yellow };
Enum --> String
(1) Use the Object. ToString () method: for example, the value of Colors. Green. ToString () is a "Green" string;
(2) Use the static method GetName and GetNames of Enum:
Public static string GetName (Type enumType, Object value)
Public static string [] GetNames (Type enumType)
For example, the values of Enum. GetName (typeof (Colors), 3) and Enum. GetName (typeof (Colors), Colors. Blue) are "Blue"
Enum. GetNames (typeof (Colors) returns an enumerated string array.
String --> Enum
(1) Use the static method Parse of Enum:
Public static Object Parse (Type enumType, string value)
Example: (Colors) Enum. Parse (typeof (Colors), "Red ")
Enum --> Int
(1) because the enumeration base type is an integer other than Char, it can be forcibly converted.
Example: (int) Colors. Red, (byte) Colors. Green
Int --> Enum
(1) An integer can be forcibly converted to an enumeration type.
For example: Colors color = (Colors) 2, then color is Colors. Blue
(2) Use the static method ToObject of Enum.
Public static Object ToObject (Type enumType, int value)
For example: Colors color = (Colors) Enum. ToObject (typeof (Colors), 2), then color is Colors. Blue
Method for determining whether an integer is defined in enumeration: Enum. IsDefined
Public static bool IsDefined (Type enumType, Object value)
Example: Enum. IsDefined (typeof (Colors), n ))
Public enum EmployeeType
{
RegularEmployee,
StoreManager,
ChainStoreManager,
DepartmentManager,
Supervisor
}
We can use the ToString () method to obtain the following information.
EmployeeType employee = EmployeeType. ChainStoreManager;
Console. WriteLine (employee. ToString ());
Console. WriteLine (EmployeeType. ChainStoreManager. ToString ());
/*
Output result:
ChainStoreManager
ChainStoreManager
*/
But how can we obtain results like "Chain Store Manager" with spaces? We cannot create an enumerative member that contains spaces. Otherwise, your code cannot be compiled. In fact, we have many solutions to solve this problem.
1. Create a ing between enumerated members and strings (arrays or hash tables can be used)
2. Specify the result of the enumerated member ToString () as the key to the resource file.
3. Use reflection .... (I will talk about it below)
Use attributes in Enumeration
I will use attributes to associate a string with enumeration members. The following is a simple example to illustrate how this is done.
Public class EnumDescriptionAttribute: Attribute
{
Private string m_strDescription;
Public EnumDescriptionAttribute (string strPrinterName)
{
M_strDescription = strPrinterName;
}
Public string Description
{
Get {return m_strDescription ;}
}
}
The EnumDescriptionAttribute class inherits from Attribute, which contains a String-type Attribute Description. Next, it is associated with all the members of the enumeration EmployeeType.
Public enum EmployeeType
{
[EnumDescription ("Regular Employee")]
RegularEmploye,
[EnumDescription ("Store Manager")]
StoreManager,
[EnumDescription ("Chain Store Manager")]
ChainStoreManager,
[EnumDescription ("Department Manager")]
DepartmentManager,
[EnumDescription ("On Floor Supervisor")]
Supervisor
}
Get attribute values from Enumeration
To get the attribute value, I must use reflection. Below is a simple example:
// Setup the enum
EmployeeType employee = EmployeeType. ChainStoreManager;
// Get the field informaiton
FieldInfo fieldInfo = employee. GetType (). GetField ("ChainStoreManager ");
// Get the attributes for the enum field
Object [] attribArray = fieldInfo. GetCustomAttributes (false );
// Cast the one and only attribute to EnumDescriptionAttribute
EnumDescriptionAttribute attrib = (EnumDescriptionAttribute) attribArray [0];
// Write the description
Console. WriteLine ("Description: {0}", attrib. Description );
/*
Input result:
Chain Store Manager
*/
The most important line of code is FieldInfo fieldInfo = employee. getType (). getField ("ChainStoreManager"); note that the enumerated member name ChainStoreManager can be replaced by the ToString () method.