我在C#中创建了一个简单的枚举,如下所示
enum Direction
{
North,
South,
East,
West
}
现在我正在创建一个这个Direction enum的变量:
Direction D = (Direction)3;
Console.WriteLine(D.ToString());
一切顺利,代码按预期工作,并提供以下输出。
West
但现在如果我更改代码有点像:
Direction D = (Direction)8;
Console.WriteLine(D.ToString());
它给出了以下输出:
8
所以最后我想到的问题是:
先谢谢好友 :)
GURU
答案 0 :(得分:1)
为什么在最大可接受值为3时完成此操作。
这个假设是不正确的。您可以将枚举基类型范围内的任何值(此处为:int
)分配给该枚举类型的变量。
如果它在编译时被接受,那么为什么它不会抛出任何异常,而.net框架是如此强大的框架呢。
它不会抛出异常,因为它不是特殊情况,但完全有效。
最后但并非最不重要的是,如果一切都没有预料到为什么它会给出输出8。
因为没有枚举成员为值8
提供名称。
如果您不希望将具有名称的枚举值传递给方法,则应检查方法的输入:
void Move(Direction d)
{
if (d != Direction.North && d != Direction.South &&
d != Direction.East && d != Direction.West)
{
throw new ArgumentOutOfRangeException("d");
}
// ...
}
答案 1 :(得分:1)
枚举只是命名常量,如果将值转换为枚举,C#不提供任何范围检查。
1)没有范围检查。查看枚举类似于(通常)更大数字的一组(通常)小名称。即C#允许您为特定值指定名称,但它不限制允许的值,因此如果您强制转换,枚举变量可以采用基础类型的任何值(默认为int)。
2)与1)相同
3)你还期待什么?您尚未为该值指定名称。
您也可以查看this question。
答案 2 :(得分:0)
通常,当您声明类似的枚举时,您可以根据列表设置值:
enum Direction{
North,
South,
East,
West}
Direction D = Direction.East;
您尝试将值设置为8后的理由是什么?