Why do "Not all code paths return a value" with a switch statement and an enum?
.net, c#, c#-3.0, enums, visual-studio-2008
Solution
There's nothing to say that the value of `myEnum` will be one of those values.
Don't mistake enums for being a restrictive set of values. It's really just a named set of values. For example, I could call your method with:
int x = Method((MyEnum) 127);
What would you want that to do? If you want it to throw an exception you can do that in a default case:
switch (myEnum)
{
case MyEnum.Value1: return 1;
case MyEnum.Value2: return 2;
case MyEnum.Value3: return 3;
default: throw new ArgumentOutOfRangeException();
}
Alternatively you could use `Enum.IsDefined` upfront, if you want to do some other work before the switch statement. That has the disadvantage of boxing... there are some ways round that, but they're generally more work...
Sample:
public int Method(MyEnum myEnum)
{
if (!IsDefined(typeof(MyEnum), myEnum)
{
throw new ArgumentOutOfRangeException(...);
}
// Adjust as necessary, e.g. by adding 1 or whatever
return (int) myEnum;
}
This assumes there's an obvious relationship between the underlying values in `MyEnum` and the value you want to return.
Problem
I have the following code: ``` public int Method(MyEnum myEnum) { switch (myEnum) { case MyEnum.Value1: return 1; case MyEnum.Value2: return 2; case MyEnum.Value3: return 3; } } public enum MyEnum { Value1, Value2, Value3 } ``` And I get the error: `"Not all code paths return a value"`. I do not understand how that `switch` statement could ever not jump to one of the specified cases. Can an `enum` somehow be `null`?