Mat*_*els 27 .net c# enums visual-studio-2008 c#-3.0
我有以下代码:
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
}
我得到错误:"Not all code paths return a value".我不明白该switch声明如何不能跳转到指定的情况之一.
可以将enum某种方式null?
Jon*_*eet 38
没有什么可说的,价值myEnum就是这些价值之一.
不要将枚举误认为是一组限制性的值.它实际上只是一组命名的值.例如,我可以用以下方法调用您的方法:
int x = Method((MyEnum) 127);
你想要那样做什么?如果您希望它抛出异常,您可以在默认情况下执行此操作:
switch (myEnum)
{
    case MyEnum.Value1: return 1;
    case MyEnum.Value2: return 2;
    case MyEnum.Value3: return 3;
    default: throw new ArgumentOutOfRangeException();
}
或者Enum.IsDefined,如果您想在switch语句之前执行其他工作,则可以使用.这有拳击的缺点...有一些方法,但他们通常更多的工作......
样品:
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; 
}
这假设底层值与您想要返回的值之间存在明显的关系MyEnum.
枚举不限于它们代表的值.您可以指定:
MyEnum v = (MyEnum)1000;
而且根本没有问题.为您的交换机添加默认值,您将处理所有可能的情况.