在本文,你将学会如何遍历并获取枚举的每一项,是一个非常实用的编程思想。文章末尾还备注有其他关于枚举的小技巧哦
笔者在学习Kinect过程中,发现其手势枚举多达27个(不包括用户自定义的),而在某个项目中,如果这些手势全部都用上,如果无脑操作,难免不会出现下面形式的代码:
kmgr.DeleteGesture(userId, KinectGestures.Gestures.ShoulderLeftFront); kmgr.DeleteGesture(userId, KinectGestures.Gestures.ShoulderRightFront) kmgr.DeleteGesture(userId, KinectGestures.Gestures.Psi); kmgr.DeleteGesture(userId, KinectGestures.Gestures.RaiseLeftHand); kmgr.DeleteGesture(userId, KinectGestures.Gestures.RaiseRightHand); kmgr.DeleteGesture(userId, KinectGestures.Gestures.Run); kmgr.DeleteGesture(userId, KinectGestures.Gestures.Stop); kmgr.DeleteGesture(userId, KinectGestures.Gestures.SwipeDown); kmgr.DeleteGesture(userId, KinectGestures.Gestures.SwipeLeft); kmgr.DeleteGesture(userId, KinectGestures.Gestures.SwipeRight); kmgr.DeleteGesture(userId, KinectGestures.Gestures.SwipeUp); kmgr.DeleteGesture(userId, KinectGestures.Gestures.Tpose);
显然,这个枚举就是一个共通点,如果使用foreach遍历枚举并赋值,能将上述代码简化成如下样子:
foreach (KinectGestures.Gestures item in Enum.GetValues(typeof(KinectGestures.Gestures))) kmgr.DeleteGesture(userId, item);
示例学习:
using System; using UnityEngine; public enum TestEnumArr { Test_01, Test_02, Test_03, Test_04, Test_05, Test_06, Test_07, Test_08, Test_09, Test_10, Test_11, Test_12 public class TestForEnum : MonoBehaviour { void Start () { foreach (TestEnumArr item in Enum.GetValues(typeof(TestEnumArr))) DoSomeThings(item);//这个方法证明我传过去了枚举 void DoSomeThings (TestEnumArr tEnum) { Debug.Log(tEnum.ToString());//简单演示枚举项被转过来了 switch (tEnum) //实际使用的一种情况,仅供参考 case TestEnumArr.Test_01: Debug.Log("我是枚举第一项"); //演示一下,下面的不写了哈~ break;
动画演示:
//int msg=100; //HttpStatusCode msg=HttpStatusCode.Created; Enum.IsDefined(typeof(HttpStatusCode),msg) //msg 可以是string ,也可以是数值,也可以是枚举 (int)Enum.Parse(typeof(HttpStatusCode), msg)//将string类型的msg转成枚举,然后转int类型的常数值4、枚举也要玩出键值对的感觉(KeyValuePair)
public enum PlantState None=0, Seed =1, Child = 24 * 3 * 2, Midd = Child + (int)(0.5f * 7 * 2), //如乘了float类型,必须这样用上两个括号 Old = Midd + (int)(0.5f * 50 * 2) int total=0; foreach (PlantState item in Enum.GetValues(typeof(PlantState))) Debug.Log(item.ToString() + (int)item); //输出:Seed1、Child144... 玩出键值对的感觉有木有! total += (int)item;
怎么获取枚举类型的名称呢? _type.GetType().Name