2016-11-22 266 views
1

我想知道是否可以比较两个独立枚举(来自不同脚本)的(int)?比较C#/ Unity中的枚举值?

我目前正在:

if((int)newMiner.minerType == (int)resourceType) 
     { 
      Debug.Log("Resource Holder Accepts Miner"); 
     } 

newMiner是有我想比较枚举其他脚本和minerType是一个枚举resourceType为同时是我试图把它与比较本地枚举。

我现在不会返回错误,但它总是返回true。任何有关如何这样做/不工作的信息将非常感谢:)

+0

你的newMiner是什么样的,你的resourceType枚举是什么样的?你应该发布这两个。 – Programmer

+0

你可以粘贴枚举声明吗?我怀疑,无论是在minerType和resourceType之下,它们实际上并不相互对应。 –

+2

理论上,是的,您可以将一个'Enum'强制转换为一个int并进行比较。但是'Enum'也可以使用'[Flags]'(一次考虑多个值),这完全打破了这个。另外,每个'Enum'都必须与它们的数值相匹配,以便用于任何用途。另外,为什么不放置一个断点,并看看你从两者中得到什么样的整数? – Zer0

回答

2

你不能这样做。

只有一个公开可用的枚举!在两个地方使用相同的。

3

比方说,你有两个枚举

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"); 

输出:

汽车衡房屋价值

这是比赛,因为WindowCar枚举和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"); 

输出:

汽车值房屋值

匹配再次,这是因为枚举LightCar枚举和LightHouse两者共享同样的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从CarHouse Enum不匹配。 为什么?

由于GateHouse枚举具有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并修复它。

+1

优秀的解释,除了一个枚举成员的值并不总是它的索引(如果没有显式赋值,这只是默认值)。当然,举例来说,举例来说,枚举是其他鱼类的一大壶。 – Cameron

+0

是的,是的,你是对的。我写这个假设默认值。至于旗帜,是的,这是一个完全不同的事情,但是OP没有提到Flags,所以它只是假设OP只是试图比较两个不同枚举中的值。 – Programmer