我有3种相机模式的简单enum
值类型。我知道如何打印出每个值(例如Debug.Log(OrbitStyle.Smooth)
或Debug.Log(OrbitStyle.Smooth.ToString())
),但为了将它们全部打印出来,我想我必须为它编写一个函数。
我的第一个问题是:这是唯一的方法,还是有一个循环enum
的功能?
我的第二个问题是:为什么我的Unity3D
程序在添加=
以包含所有值时会崩溃,同时递增/递减?下面的程序打印出Smooth, Step
然后Fade, Step
,但我使用<=
或>=
来包含最低和最高值,但它总是崩溃。我做错了什么?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraOribit : MonoBehaviour
{
enum OrbitStyle
{
Smooth,
Step,
Fade
}
void Start()
{
for ( OrbitStyle e1 = OrbitStyle.Smooth; e1 < OrbitStyle.Fade; e1 = IncrementEnum(e1) )
{
Debug.Log(e1);
}
for ( OrbitStyle e2 = OrbitStyle.Fade; e2 > OrbitStyle.Smooth; e2 = DecrementEnum(e2) )
{
Debug.Log(e2);
}
}
static OrbitStyle IncrementEnum(OrbitStyle e)
{
if (e == OrbitStyle.Fade)
return e;
else
return e + 1;
}
static OrbitStyle DecrementEnum(OrbitStyle e)
{
if (e == OrbitStyle.Smooth)
return e;
else
return e - 1;
}
}
答案 0 :(得分:1)
关于第一个问题,您可以在此处看到答案:Can you loop through all enum values?
对于第二个问题,for
循环的性质是:
for (OrbitStyle e1 = OrbitStyle.Smooth; e1 <= OrbitStyle.Fade; e1 = IncrementEnum(e1)) {
Debug.Log(e1);
}
等于:
OrbitStyle e1 = OrbitStyle.Smooth;
while(e1 <= OrbitStyle.Fade){
Debug.Log(e1);
e1 = IncrementEnum(e1);
}
现在,正如您所看到的,在循环结束时(e1 == OrbitStyle.Fade
时),条件返回true以便代码运行,最后再次调用IncrementEnum(e1)
时, e1已经处于枚举的最大数量,并且尝试再次增加它会导致崩溃。