繁体   English   中英

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

[英]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");

输出:

汽车价值与房屋价值相符

这是因为WindowCar枚举和WindowHouse枚举两者共用同一的枚举值指数是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枚举两者属于同一的枚举值指数是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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM