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