比较C#/ Unity中的枚举值?

Sl0*_*hzy 1 c# enums unity-game-engine

我想知道是否有可能比较两个单独的枚举(来自不同脚本)的(整数)?

我目前正在尝试:

 if((int)newMiner.minerType == (int)resourceType)
        {
            Debug.Log("Resource Holder Accepts Miner");
        }
Run Code Online (Sandbox Code Playgroud)

newMiner是另一个具有我要比较的枚举的脚本,minerType是一个Enum,而resourceType是我要与之比较的本地Enum。

我现在所拥有的不会返回错误,但是它总是返回true。任何有关如何/不起作用的信息将不胜感激:)

Pro*_*mer 5

假设您有两个枚举

enum Car { Window, Door, Light, Gate, Bath }

enum House { Window, Door, Light, Bath, Gate }
Run Code Online (Sandbox Code Playgroud)

然后你有他们的实例

Car car = Car.Window;
House house = House.Window;
Run Code Online (Sandbox Code Playgroud)

您可以直接将它们与 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");
Run Code Online (Sandbox Code Playgroud)

输出:

汽车价值与房屋价值相符

这是因为Window来自CarEnum和Window来自HouseEnum都共享相同的Enum值索引,即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");
Run Code Online (Sandbox Code Playgroud)

输出:

汽车价值与房屋价值相符

同样,这是因为Light来自CarEnum和Light来自HouseEnum都共享相同的Enum值索引,即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");
Run Code Online (Sandbox Code Playgroud)

输出:

汽车价值与房屋价值不符

惊喜!惊喜!Gate与from CarHouseEnum的Gate 不匹配。为什么?

因为Gate来自HouseEnum的值为4和而Gate来自CarEnum的值为34!= 3

将Enum转换为int时,将获得其索引位置。位置从0数组开始。例如,下面的Enum声明代码向您显示该索引的外观。

enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 }
Run Code Online (Sandbox Code Playgroud)

为了使if语句为true,它们都必须位于相同的位置。false如果他们处于不同的位置,您将得到。再次检查您的枚举并解决该问题。