http://apps.hi.baidu.com/share/detail/23749270
1、关于enum的定义enum Fabric
{Cotton = 1,Silk = 2,Wool = 4,Rayon = 8,Other = 128}
LISIHUA = 64, }
根据下面的两个例子,粗略地说,一方面,设置标志[Flags]或者[FlagsAttribute],则表明要将符号名列举出来;另一方面,可以通过强制转换,将数字转换为符号名。说不准确。看下面的例子体会吧。注意:
例二:class FlagsAttributeDemo{ // Define an Enum without FlagsAttribute.enum SingleHue : short{ 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 */
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); } }