使用枚举直接使用整数类型的好处?

use*_*291 8 c# enums

1)我知道以下好处:

  • 它们会增加抽象级别,因为您可以立即看到底层积分值代表什么.

  • 您可以使用它们而不是幻数,并通过这样做使代码更容易理解

  • 它们还限制enum变量可以具有的值,这样做可以使应用程序更安全,因为程序员知道哪些值对变量有效,所以我猜它们提供类型安全性

他们提供的直接使用积分值还有其他好处吗?

2)为什么他们使用积分作为基础类型而不是字符串?

谢谢

Jas*_*ams 8

您列出了很多核心原因,其中枚举优于整数类型.

  • 命名常量比魔术数字更安全,更易读

  • Enums向程序员描述了它们的用途.积分值不会.

  • 自然地限制了可以传入的值集.(你已经获得了类型安全冰山的一角......但看起来更深......)

您还可以添加:

  • 大大增加了类型安全性.如果你接受'int',那么任何int都可以传入.如果你接受一个VehicleType,那么只能传入一个VehicleType.我不只是在谈论有人在最大允许数为5时传入6.我的意思是,如果你将FuelType.Unleaded传递给一个认为它意味着VehicleType.Aeroplane的函数?有了枚举,编译器会告诉你,你是个白痴.一个整体类型说"是的,5对我很好",你的程序表现出非常奇怪的行为,可能非常难以追查.

  • 更容易重构.就像任何魔术常数一样,如果你在程序中传递了一百个位置的值5,那么如果你决定改变5以获得不同的含义,你就会遇到麻烦.使用枚举(只要您没有二进制向后兼容性问题),您可以更改基础值.如果愿意,您还可以更改枚举的基础类型(byte - > int - > long),而不必再执行任何操作,而不是重新编译客户端代码.

  • 当位和掩码可以命名时,位域更容易使用.如果添加新位,您通常可以安排一些事情,这样只需更新相关掩码就可以让大部分现有代码完美地处理新的位域,而无需从头开始重写.

  • 整个计划的一致性.如果您对模糊处理和类型安全性非常小心,则枚举允许您表示用户在代码中使用相同名称选择的命名值列表,但没有使用字符串的效率成本.

  • 每个人都理解为什么常量在代码中很棒.枚举只是为您提供了一种将相关的常量组合在一起的方法.您可以使用consts命名空间以更混乱的方式实现相同的功能.

  • 使用enum作为参数而不是bool不仅使代码自我记录,可读,而且不容易出错.当您意识到两个选项不够时,它还可以更轻松地添加第三个选项.

与所有工具一样,枚举可能会被滥用.只要在有意义的地方使用它们.

2)为什么使用字节或整数而不是字符串?它们只是小而有效.


Rex*_*x M 5

我猜想它们需要底层整数类型以确保比较的简单性并且更容易支持位标志.没有这个限制,我们,或编译器,或运行时,可能不得不采取一些模糊来做组合之类的事情 - 或者我们会陷入这样的情况 - 如你所说 - 我们不应该关心底层类型(抽象的意义)然而当我们试图说A | B我们得到一个运行时错误,因为我们使用了一个不能进行那种操作的底层类型.