我想知道是否可以比较两个单独的枚举(来自不同的脚本)的(int)?
我正在尝试:
if((int)newMiner.minerType == (int)resourceType)
{
Debug.Log("Resource Holder Accepts Miner");
}
newMiner是另一个具有枚举的脚本我试图比较,minerType是一个枚举,而resourceType是我试图与之比较的本地枚举。
我现在拥有的不会返回错误,但是,它总是返回true。任何有关如何工作/不工作的信息将非常感谢:)
答案 0 :(得分:5)
假设您有两个枚举
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)
进行比较吗?
否强>
您可以将其值与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
枚举的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
共享同一个枚举值索引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");
输出:
汽车价值与房屋价值不匹配
惊喜!惊喜!来自Car
和House
枚举的门和门不匹配。的为什么吗
由于来自Gate
枚举的House
的值为4
,而来自Gate
的{{1}}枚举的值为Car
。 4!= 3 。
当您将Enum强制转换为int时,您将获得它的索引位置。该位置从3
开始,就像一个数组。例如,下面的Enum声明代码显示了索引的样子。
0
对于if语句为enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 }
,它们都必须处于相同的位置。如果他们处于不同的位置,您将获得true
。再次检查你的枚举并修复它。
答案 1 :(得分:2)
你不能这样做。
只有一个公开的枚举!在两个地方都使用相同的。