[英]Comparing enum values in C#/Unity?
我想知道是否可以比较两个单独的枚举(来自不同脚本)的(int)?
我目前正在尝试:
if((int)newMiner.minerType == (int)resourceType)
{
Debug.Log("Resource Holder Accepts Miner");
}
假设您有两个枚举
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
Enum的Gate和Gate不匹配。 为什么?
因为House
Enum的Gate
值为4
,而Car
Enum的Gate
值为3
。 4!= 3
将Enum转换为int时,将获得其索引位置。 位置像数组一样从0
开始。 例如,下面的Enum声明代码向您显示该索引的外观。
enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 }
为了使if语句为true
,它们都必须处于相同的位置。 如果它们处于不同的位置,您将得到false
。 再次检查您的枚举并解决该问题。
你做不到
只要有一个公开可用的枚举! 在两个地方使用相同的名称。
但我需要它在菜单和组件中。 我如何公开并包括在内?
"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.