C#Enumeration使⽤
/* from: */
1、关于enum的定义
enum Fabric
{
Cotton = 1,
Silk = 2,
Wool = 4,
Rayon = 8,
Other = 128
}
2、符号名和常数值的互相转换
Fabric fab = Fabric.Cotton;
int fabNum = (int)fab;//转换为常数值。必须使⽤强制转换。
Fabric fabString = (Fabric)1;//常数值转换成符号名。如果使⽤ToString(),则是((Fabric)1).ToString(),注意必须有括号。 string fabType = fab.ToString();//显⽰符号名
string fabVal = fab.ToString ("D");//显⽰常数值
3、获得所有符号名的⽅法(具体参见Enum类)
public enum MyFamily
{
YANGZHIPING = 1,
GUANGUIQIN = 2,
YANGHAORAN = 4,
LIWEI = 8,
GUANGUIZHI = 16,
LISIWEN = 32,
LISIHUA = 64,
}
foreach (string s in Enum.GetNames(typeof(MyFamily)))
{
Console.WriteLine(s);
}
4、将枚举作为位标志来处理
根据下⾯的两个例⼦,粗略地说,⼀⽅⾯,设置标志[Flags]或者[FlagsAttribute],则表明要将符号名列
举出来;另⼀⽅⾯,可以通过强制转换,将数字转换为符号名。说不准确。看下⾯的例⼦体会吧。注意:
例⼀:
Fabric fab = Fabric.Cotton | Fabric.Rayon | Fabric.Silk;
Console.WriteLine("MyFabric = {0}", fab);//输出:Fabric.Cotton | Fabric.Rayon | Fabric.Silk;
例⼆:
class FlagsAttributeDemo
{
// Define an Enum without FlagsAttribute.
enum SingleHue : shortenum怎么用
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
static void Main( )
{
Console.WriteLine(
"This example of the FlagsAttribute attribute /n" +
"generates the following output." );
Console.WriteLine(
"/nAll possible combinations of values of an /n" +
"Enum without FlagsAttribute:/n" );
// Display all possible combinations of values.
for( int val = 0; val <= 8; val++ )
Console.WriteLine( "{0,3} - {1}", val, ( (SingleHue)val ).ToString( ) );
Console.WriteLine( "/nAll possible combinations of values of an /n" + "Enum with FlagsAttribute:/n" );
// Display all possible combinations of values.
// Also display an invalid value.
for( int val = 0; val <= 8; val++ )
Console.WriteLine ( "{0,3} - {1}", val, ( (MultiHue)val ).ToString( ) );
}
}
/*
This example of the FlagsAttribute attribute
generates the following output.
All possible combinations of values of an
Enum without FlagsAttribute:
0 - Black
1 - Red
2 - Green
3 - 3
4 - Blue
5 - 5
6 - 6
7 - 7
8 - 8
All possible combinations of values of an
Enum with FlagsAttribute:
0 - Black
1 - Red
2 - Green
3 - Red, Green
4 - Blue
5 - Red, Blue
6 - Green, Blue
7 - Red, Green, Blue
8 - 8
*/
5、枚举作为函数参数。经常和switch结合起来使⽤。下⾯举例
public static double GetPrice(Fabric fab)
{
switch (fab)
{
case Fabric.Cotton: return (3.55);
case Fabric.Silk: return (5.65);
case Fabric.Wool: return (4.05);
case Fabric.Rayon: return (3.20);
case Fabric.Other: return (2.50);
default: return (0.0);
}
}
6、上⾯三点⼀个完整的例⼦
//1、enum的定义
public enum Fabric : short
{
Cotton = 1,
Silk = 2,
Wool = 3,
Rayon = 8,
Other = 128
}
//将枚举作为参数传递
public static double GetPrice(Fabric fab)
{
switch (fab)
{
case Fabric.Cotton: return (3.55);
case Fabric.Silk : return (5.65);
case Fabric.Wool: return (4.05);
case Fabric.Rayon: return (3.20);
case Fabric.Other: return (2.50);
default: return (0.0);
}
}
public static void Main()
{
Fabric fab = Fabric.Cotton;
int fabNum = (int)fab;
string fabType = fab.ToString();
string fabVal = fab.ToString ("D");
double cost = GetPrice(fab);
Console.WriteLine("fabNum = {0}/nfabType = {1}/nfabVal = {2}/n", fabNum, fabType, fabVal);
Console.WriteLine("cost = {0}", cost);
}
7、Enum类的使⽤
Enum.IsDefinde、Enum.Parse两种⽅法经常⼀起使⽤,来确定⼀个值或符号是否是⼀个枚举的成员,然后创建⼀个实例。Enum.GetName 打印出⼀个成员的值;Enum.GetNames打印出所有成员的值。其中注意typeof的使⽤。这⼀点很重要。
public enum MyFamily
{
YANGZHIPING = 1,
GUANGUIQIN = 2,
YANGHAORAN = 4,
LIWEI = 8,
GUANGUIZHI = 16,
LISIWEN = 32,
LISIHUA = 64,
}
string s = "YANGHAORAN";
if (Enum.IsDefined(typeof(MyFamily), s))
{
MyFamily f = (MyFamily)Enum.Parse(typeof(MyFamily), s);
GetMyFamily(f);
Console.WriteLine("The name is:" + Enum. GetName(typeof(MyFamily), 2));
string[] sa = Enum.GetNames(typeof(MyFamily));
foreach (string ss in sa)
{
Console.WriteLine(ss);
8. Enumeration变量的⽂字描述
如果想要Enumeration返回⼀点有意义的string,从⽽⽤户能知道分别代表什么,则按如下定义:using System.ComponentModel;
enum Direction
{
[Description("this means facing to UP (Negtive Y)")]
UP = 1,
[Description("this means facing to RIGHT (Positive X)")]
RIGHT = 2,
[Description("this means facing to DOWN (Positive Y)")]
DOWN = 3,
[Description("this means facing to LEFT (Negtive X)")]
LEFT = 4
};
使⽤如下⽅法来获得⽂字描述:
using System.Reflection;
using System.ComponentModel;
public static String GetEnumDesc(Enum e)
{
FieldInfo EnumInfo = e.GetType().GetField(e.ToString());
DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[]) EnumInfo.
GetCustomAttributes (typeof(DescriptionAttribute), false);
if (EnumAttributes.Length > 0)
{
return EnumAttributes[0].Description;
}
return e.ToString();
}
或者可以⾃⼰定义Discription Attributes:(来⾃:)
enum Direction
{
[EnumDescription("Rover is facing to UP (Negtive Y)")]
UP = 1,
[EnumDescription("Rover is facing to DOWN (Positive Y)")]
DOWN = 2,
[EnumDescription("Rover is facing to RIGHT (Positive X)")]
RIGHT = 3,
[EnumDescription("Rover is facing to LEFT (Negtive X)")]
LEFT = 4
}; AttributeUsage(AttributeTargets.Field)]
public class EnumDescriptionAttribute : Attribute
{
private string _text = "";
public string Text
{
get { return this._text; }
}
public EnumDescriptionAttribute(string text)
{
_text = text;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论