8
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?

3
  • Daniel what happens if you actually assign the cast to another object and check the value of the object after the assignment? you are just comparing with == wich does return a value but in fact is not really assigning anything... Commented Feb 17, 2011 at 9:07
  • 1
    possible duplicate of Casting ints to enums in C# Commented Feb 17, 2011 at 9:09
  • 1
    See this as well: stackoverflow.com/questions/618305/enum-casting Commented Feb 17, 2011 at 9:10

2 Answers 2

11

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

Sign up to request clarification or add additional context in comments.

Comments

1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.