Take for example the base enum "ABC" (\Data Dictionary\Base Enums\ABC). You can assign ABC=555, and it will store an integer value of 255 with no issue.
To check if an enum value is valid, you can use this method:
static boolean checkABCEnum(ABC _abc) { return new DictEnum(enumNum(ABC)).value2Symbol(_abc)); }
Here is a sample job that will demonstrate how this can be an issue:
static void CheckIfEnumIsValid(Args _args) { // Possible enum values 0, 1, 2, 3 ABC abcValid, abcInvalid; // Valid enum abcValid = ABC::C; info(strFmt("%1, %2", enum2int(abcValid), abcValid)); // Invalid enum, but integer assignment works and is stored abcInvalid = 555; info(strFmt("%1, %2", enum2int(abcInvalid), abcInvalid)); if(new DictEnum(enumNum(ABC)).value2Symbol(abcValid)) info(strFmt("Enum with type %1 and integer value %2 (%3) is valid", typeOf(abcValid), enum2int(abcValid), abcValid)); else error(strFmt("Enum with type %1 and value %2 is invalid", typeOf(abcValid), enum2int(abcValid))); if(new DictEnum(enumNum(ABC)).value2Symbol(abcInvalid)) info(strFmt("Enum with type %1 and integer value %2 (%3) is valid", typeOf(abcInvalid), enum2int(abcInvalid), abcInvalid)); else error(strFmt("Enum with type %1 and value %2 is invalid", typeOf(abcInvalid), enum2int(abcInvalid))); /* Output: 3, C 4, Enum with type Enum and integer value 3 (C) is valid Enum with type Enum and value 4 is invalid */ }