Yeonho
Yeonho

Reputation: 3623

Why don't I get InvalidCastException when casting enum to integer fails?

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?

Upvotes: 8

Views: 4450

Answers (2)

ChrisF
ChrisF

Reputation: 137148

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

Upvotes: 11

MetaFight
MetaFight

Reputation: 1306

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 :)

Upvotes: 1

Related Questions