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

时间:2016-11-22 23:50:42

标签: c# unity3d enums

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

我正在尝试:

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

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

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

2 个答案:

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

输出:

  

汽车价值与房屋价值不匹配

惊喜!惊喜!来自CarHouse枚举的门和门不匹配。的为什么吗

由于来自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)

你不能这样做。

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