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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…