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

标签 c# unity3d enums

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

我目前正在尝试:

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

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

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

最佳答案

假设您有两个枚举

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

输出:

Car Value matches House value

那是因为 Window来自 Car枚举和 Window来自 House Enum 都共享相同的 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");

输出:

Car Value matches House value

同样,那是因为 Light来自 Car枚举和 Light来自 House Enum 都共享相同的 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");

输出:

Car Value DOES NOT match House value

惊喜!惊喜!门与门自CarHouse枚举不匹配。 为什么?

因为 Gate来自 House枚举的值为 4同时Gate来自 Car枚举的值为 3 . 4 != 3

当您将 Enum 转换为 int 时,您将获得它的索引位置。位置从0开始像一个数组。例如,下面的 Enum 声明代码向您展示了索引的样子。

enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 }

如果 if 语句是 true , 他们都必须在同一个位置。你会得到 false如果他们处于不同的位置。再次检查您的枚举并修复它。

关于c# - 比较 C#/Unity 中的枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40753780/

相关文章:

c# - 当我要求 dotMemory 强制垃圾收集时究竟会发生什么

delphi - 如何将匿名枚举类型传递到子例程中?

c# - 从 Google Play 加载成就,无需任何 Unity 插件,仅使用 native 代码

unity3d - 使用 kudan AR 旋转 AR 对象以始终面向相机

unity3d - 清理现有的Unity项目并将其迁移到新的一台或另一台PC中

jsf - 如何在 f :selectItem(s) 中使用枚举值

Java枚举函数返回值

c# - 在 CI 机器上构建 WCF 库

c# - 将图像嵌入到 System.Web.Mail.MailMessage 中的电子邮件中

c# - 防止危险 Request.Path 的 HealthMonitoring 错误电子邮件