網上查了下資料,發現沒我想知道東西,只能自己研究一下,關於枚舉的詳細由於晚上還有點事,就不怎麼寫了下面我給大家示範一下Eum類中幾種方法Enum.IsDefined,Enum.Parse,Enum.GetName,Enum.GetNames,Enum.GetValues.
先說一下System.Enum類,它是所有枚舉類型的抽象基類(它是一種與枚舉類型的基礎類型不同的獨特類型),所有的枚舉類型都是從它派生的,存在所有的枚舉類型和Enum類的裝箱和拆箱轉換。簡單說一下,直接上代碼了:
以下代碼最好自己複製運行一下,否則可能看不明白:
using System;
public class EnumTest
{
enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
class Test
{
public static void Main()
{
Type days=typeof(Days);
//示範列印一個枚舉成員的枚舉名
Console.WriteLine("1-{0}",Enum.GetName(days,1));
// 使用GetNames示範列印所有枚舉名:
string[] enumNames = Enum.GetNames(days);//擷取所有枚舉名
for (int i = 0; i < enumNames.Length; i++)
{
Console.WriteLine("{0}-{1}",i,enumNames[i]);
}
//示範使用GetValue擷取並列印所有枚舉值
int[] enumValues = (int[])Enum.GetValues(days);
for (int i = 0; i < enumValues.Length; i++)
{
Console.WriteLine("{0}-{1}",enumValues[i],(Days)i);
}
//示範使用IsDefined判斷枚舉中是否存在具有指定枚舉值
Console.WriteLine("Enum.IsDefined={0}",Enum.IsDefined(days,8));
//現在示範Enum.Parse
//將一個或多個枚舉常數的名稱或數字值的字串表示轉換成等效的枚舉對象。
for(int i=0;i<enumNames.Length;i++)
{
Console.WriteLine("{0}-{1}",i,Enum.Parse(days,i.ToString()));
//等價於
//Console.WriteLine("{0}-{1}", (int)(Enum.Parse(days,i.ToString())), Enum.Parse(days,i.ToString()));
//也等價於
// Console.WriteLine("{0}-{1}",i,enumNames[i]);
}
Console.ReadKey();
}
}
}
FlagsAttribute 類
FlagsAttribute屬性就是枚舉類型的一項可選屬性。它的主要作用是可以將枚舉作為位域處理,所謂位域是單個儲存單元內相鄰二進位位的集合。通過為枚舉添加這個屬性,可以改變枚舉的一些行為來滿足我們的需要,我先瞭解下兩條基本準則,以後在研究。1.只有要對數值執行按位元運算(AND、OR、XOR)時才對枚舉使用 FlagsAttribute 自訂屬性。2. 必須用 2 的冪(即 1、2、4、8 等)定義枚舉常量。這意味著組合的枚舉常量中的各個標誌都不重疊。
下面看下我的舉例,很簡單拿個計算機試試就明白了。
using System;
class FlagsAttributeDemo
{
enum Color1 : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
[FlagsAttribute]
enum Color2 : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
static void Main()
{
Console.WriteLine("測試未使用FlagsAttribute屬性");
Color1 MyColor1 = Color1.Red | Color1.Blue & Color1.Green;
//我先不運行計算一下看看是那個:0001|0100&0010=0001 應該是Red
Console.WriteLine("MyColor1={0}", MyColor1);
Color1 MyColor_1 = Color1.Red | Color1.Blue;
//我先不運行計算一下看看是那個:0001|0100=0101 應該是5
Console.WriteLine("MyColor_1={0}",MyColor_1);
Console.WriteLine("測試使用FlagsAttribute屬性");
Color2 MyColor2 = Color2.Red | Color2.Blue;
//我先不運行計算一下看看是那個:0001|0100=0101應該是Red,Blue
Console.WriteLine("MyColor2={0}", MyColor2);
Console.ReadKey();
}
}