C#之枚举类型总结

来源:互联网 发布:js防水怎么样 编辑:程序博客网 时间:2024/05/16 05:55

一、enum位域[Flags]

[Flags]
public enum Week  
{  
//星期一 
monday = 1 <<  0,  
//星期二
tuesday = 1 <<  1,  
//星期三 
wednesday = 1 <<  2,  
//星期四 
tursday = 1 <<  3,  
//星期五 
friday = 1 <<  4,  
//星期六
saturday = 1 <<  5,  
//星期日
sunday = 1 <<  6  
}

[Flags]
public enum Week  
{  
//星期一 
monday = 0x1, 
//星期二
tuesday = 0x2, 
//星期三 
wednesday = 0x4,  
//星期四 
thursday = 0x8, 
//星期五 
friday = 0x10, 
//星期六
saturday = 0x20,,  
//星期日
sunday = 0x40
}

1.、在枚举定义加上关键字 [Flags],表示这个是位枚举
2.、“&”:表示两边是否其中一个是另外一个的子集,如果是返回子集,否则返回0
(如果其中一个包含另外一个,返回被包含的,否则返回0)用“&"的判断这个枚举值是否出现在这个枚举中
3、“|”:表示两边求并集(元素相加,相同元素只出现一次)

4、“^”:表示从两者的并集中去除两者的交集(把两个的元素合并到一起,如果两个中有公共元素,要将其除去)

5、“~”:表示取反

6、名称和下标的转换

Week weeks = Week.tuesday | Week.monday;
Debug.Log (Weeks );-->monday, tuesday

weeks = Week.monday & Weeks; 
Debug.Log (Weeks );-->monday
weeks =   weeks & Week.monday; 
Debug.Log (weeks );-->monday

weeks = (Week.monday | Week.wednesday)^ (Week.tuesday | Week.monday); 
Debug.Log (weeks );-->tuesday, wednesday
weeks = (Week.monday | Week.wednesday) ^ (Week.tuesday | Week.sunday); 
Debug.Log (weeks );-->monday, tuesday, wednesday, sunday

week = Week.tuesday | Week.monday | Week.wednesday;  
weeks = weeks &(~Week.monday);-->tuesday, wednesday  

        weeks = Week.tuesday | Week.monday;
Debug.Log ((int )weeks );-->3 tuesday, tursday

weeks = (Week )Enum.Parse (typeof(Week ),"10");

Debug.Log (weeks );--> tuesday, tursday


二、Enum、Int、String的相互转换

1、Enum-->String

(1)利用Object.ToString()方法:如Debug.Log (Week.tuesday.ToString ())的值是"tuesday"字符串;(2)利用Enum的静态方法GetName:   public static string GetName(Type enumType,Object value)   public static string[] GetNames(Type enumType)   例如:Debug.Log (Enum.GetName (typeof(Week), 2) );-->tuesday与Debug.Log (Enum.GetName (typeof(week), week.tuesday) );
-->tuesday

2、String-->Enum

(1)利用Enum的静态方法Parse:   public static Object Parse(Type enumType,string value)   例如:

weeks = (Week )Enum.Parse (typeof(Week ),"10");

Debug.Log (weeks );--> tuesday, tursday

3、Enum-->Int

(1)因为枚举的基类型是除 Char 外的整型,所以可以进行强制转换。   例如:(int)Week.monday , (byte)Week.monday 
Debug.Log(Week.monday.ToString("D" ));
(2)遍历枚举
        Type weekType = typeof (Week);Array arrays = Enum.GetValues(weekType); for (int i = 0; i <arrays.LongLength ; i++)          Debug.Log((int)arrays.GetValue(i) );

4、Int-->Enum

(1)可以强制转换将整型转换成枚举类型。   例如:Week weeks= (Week)2; -->weeks=tuesday;(2)利用Enum的静态方法ToObject。   public static Object ToObject(Type enumType,int value)   例如:Week weeks = (Week)Enum.ToObject(typeof(Week), 2),那么weeks即为Week.tuesday

(3)遍历枚举

  foreach (Week typeWeek in Enum.GetValues(typeof (Week)))
   {
       Debug.Log(typeWeek );

    }

5、判断某个整型是否定义在枚举中的方法:Enum.IsDefined

public static bool IsDefined(Type enumType,Object value)例如:Enum.IsDefined(typeof(Week), n))
原创粉丝点击