相关疑难解决方法(0)

在C#中将内容转换为枚举

在C#中有一些我无法理解的东西.您可以将超出范围int转换为a enum,编译器不会退缩.想象一下enum:

enum Colour
{
    Red = 1,
    Green = 2,
    Blue = 3
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你写:

Colour eco;
eco = (Colour)17;
Run Code Online (Sandbox Code Playgroud)

编译器认为没问题.还有运行时.呃?

为什么C#团队决定实现这一目标?我认为,在这样的场景中,这个决定忽略了使用枚举的重点:

void DoSomethingWithColour(Colour eco)
{
    //do something to eco.
}
Run Code Online (Sandbox Code Playgroud)

在像C#这样的强类型语言中,我想假设它eco总是具有合法Colour价值.但这种情况并非如此.程序员可以调用我的方法,其值为17 eco(如前面的代码片段所示),因此我的方法中的代码不能假定它eco具有合法Colour值.我需要明确地测试它并按照我的要求处理特殊值.为什么是这样?

在我的拙见中,如果编译器在将超出范围int转换为a时发出错误(甚至是警告)消息enum,如果int在编译时已知该值,则会更好.如果没有,运行时应该在赋值语句中抛出异常.

你怎么看?这有什么原因吗?

(注意:这是我在很久以前在我的博客上发布的一个问题,但没有得到任何信息回复.)

c# enums casting

35
推荐指数
3
解决办法
1万
查看次数

标签 统计

c# ×1

casting ×1

enums ×1