C# 遍历并获取枚举(Enum)每一项(包含其他小技巧)

在本文,你将学会如何遍历并获取枚举的每一项,是一个非常实用的编程思想。文章末尾还备注有其他关于枚举的小技巧哦

笔者在学习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