Допустим, у вас есть два перечислений
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)
?
NO
Вы можете сравнить их значения с 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
Enum и 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");
Выход:
автомобиля Значение соответствует значение Дом
Опять же, это потому, что Light
от Car
Enum и Light
от House
Enum как доля тот же Enum v индекс, который составляет 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");
Выход:
автомобиля Значение не соответствует значению Дом
Сюрприз! Сюрприз! Gate и Gate от Car
и House
Enum не совпадают. Почему?
Поскольку Gate
от House
Enum имеет значение 4
и в то время Gate
от Car
Enum имеет значение 3
. 4! = 3.
Когда вы переводите Enum в int, вы получите его индексную позицию. Позиция начинается с 0
, как массив. Например, код декларации Enum ниже показывает вам, как выглядит индекс.
enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 }
Для если заявление, чтобы быть true
, они оба должны быть в-же положении. Вы получите false
, если они находятся в другом положении. Проверьте свой Enum снова и исправьте это.
Как выглядит ваш новый Miner и как выглядит ваш enumType enum? Вы должны отправить оба из них. – Programmer
Можете ли вы вставить объявления перечисления? Я подозреваю, что все, что находится под minerType и resourceType, фактически не соответствует друг другу. –
Теоретически, да, вы можете использовать 'Enum' для int и сравнивать их. Но 'Enum' также может использовать' [Flags] '(думаю, сразу несколько значений), что полностью нарушает это. Плюс каждый 'Enum' должен соответствовать их числовым значениям, чтобы это могло быть использовано. Кроме того, почему бы не поставить точку останова и посмотреть, какие целые числа вы получаете от обоих? – Zer0