比方说,你有两个枚举
enum Car { Window, Door, Light, Gate, Bath }
enum House { Window, Door, Light, Bath, Gate }
那么你有他们的实例与
Car car = Car.Window;
House house = House.Window;
你能直接与if (car == house)
比较它们?
NO
你可以比较它们的值与if ((int)car == (int)house)
?
是。看起来这就是你想要做的。
例1:
if ((int)car == (int)house)
Debug.Log("Car Value matches House value");
else
Debug.Log("Car Value DOES NOT match House value");
输出:
汽车衡房屋价值
这是比赛,因为Window
从Car
枚举和Window
从两个份额the- House
枚举相同的枚举值索引这是0
。
实施例2:
Car car = Car.Light;
House house = House.Light;
if ((int)car == (int)house)
Debug.Log("Car Value matches House value");
else
Debug.Log("Car Value DOES NOT match House value");
输出:
汽车值房屋值
匹配再次,这是因为枚举Light
从Car
枚举和Light
从House
两者共享同样的Enum v alue指数是2
。
例3:
Car car = Car.Gate;
House house = House.Gate;
if ((int)car == (int)house)
Debug.Log("Car Value matches House value");
else
Debug.Log("Car Value DOES NOT match House value");
输出:
车的价值不匹配,房屋价值
惊喜!惊喜! Gate和Gate从Car
和House
Enum不匹配。 为什么?
由于Gate
从House
枚举具有4
的值,并同时从Gate
枚举Car
具有3
的值。 4!= 3。
当您将Enum转换为int时,您将获得它的索引位置。该位置从数组开始,从0
开始。例如,下面的Enum声明代码显示了索引的外观。
enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 }
对于if语句是true
,他们都必须在同一的位置。如果他们处于不同的位置,您将获得false
。再次检查你的Enum并修复它。
你的newMiner是什么样的,你的resourceType枚举是什么样的?你应该发布这两个。 – Programmer
你可以粘贴枚举声明吗?我怀疑,无论是在minerType和resourceType之下,它们实际上并不相互对应。 –
理论上,是的,您可以将一个'Enum'强制转换为一个int并进行比较。但是'Enum'也可以使用'[Flags]'(一次考虑多个值),这完全打破了这个。另外,每个'Enum'都必须与它们的数值相匹配,以便用于任何用途。另外,为什么不放置一个断点,并看看你从两者中得到什么样的整数? – Zer0