public enum Animal { Dog = 1, Cat = 2, Cow = 3 } int animalID = 4; if ((Animal)animalID == Animal.Dog) // does not throw exception
animalID can't be casted to Animal
.
Why don't I get InvalidCastException
when casting enum to integer fails?
Because it's not an invalid cast.
The value you are casting is out of range for the enum (in this case) but it's not invalid.
As the approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong a cast from integer to enum is perfectly legal.
Source - MSDN
This is an intended behaviour and can be pretty useful. Consider enums defined with the [Flag] attribute.
btw, this is a dupe of Casting an out-of-range number to an enum in C# does not produce an exception
more answers may be in there :)