【问题标题】:Why should I use enums instead of strings? [duplicate]为什么我应该使用枚举而不是字符串? [复制]
【发布时间】:2015-08-08 20:45:42
【问题描述】:

为什么这是“良好的编码习惯”?例如,当我制作剪刀石头布控制台游戏时,大多数人建议使用枚举而不是字符串。有什么区别?

【问题讨论】:

标签: c# enums


【解决方案1】:

这只是使编译器为您工作的方法之一。如果您使用字符串,编译器无法帮助您发现值中的拼写错误:

if (move == "rokc") { // just never matches

但如果你使用枚举,编译器只允许你使用有效值:

if (move == Moves.Rokc) { // compilation error

【讨论】:

  • 我看到这很有趣还有其他原因吗?
  • @funTertain:这是最大的一个,但也有性能优势。枚举值最终只是一个数字,使用数字比使用字符串更快。
  • 性能,防止拼写错误,更好地从您的开发 IDE 自动完成。如果您正在为其他开发人员编写 API:为变量的合法值提供更好的(隐式)文档,注意:您还可以执行 Move.Rock.ToString() 之类的操作
  • @Mike 所以你不同意最好将播放器输入(Console.ReadLine())尝试解析为 enumType 并比较它们,而不是将 enumType 的计算机的选择转换为一个字符串,以便您可以与玩家的输入进行比较,从而为错误留出更多空间。另一个好处是,由于 TryParse 方法提供了一个布尔参数 ignoreCase,因此不需要进行大小写检查。
  • @funTertain:您可能想要创建一个函数来解析输入并将其转换为枚举,例如使用switch。即使用户输入恰好与枚举标识符相同,也有必要将用户界面与内部使用的值分开。例如,如果您想将应用程序翻译成不同的语言,您不想更改枚举标识符。
【解决方案2】:

查看此详细说明

枚举类型(也称为枚举或枚举)提供了一个 定义一组命名整数常量的有效方法 分配给一个变量。

http://www.codeproject.com/Articles/18809/Enums-in-C

【讨论】:

  • 这是一个很好的枚举细分
【解决方案3】:

第一个枚举只是数字的标签。这意味着,当您的代码呈现纸、剪刀和石头时 - 程序会看到 1、2 和 3。计算机没有阅读或记忆问题,但人类有,因此您的代码将读取纸节拍岩石,而计算机看到 1 节拍3. 从性能的角度来看,这很重要。

列表也是有限的。使用枚举意味着您只能拥有这三个值之一,否则将无法编译。使用字符串意味着您的代码必须在运行时不断检查是否相等 - 因此它变得臃肿、缓慢且容易出错。

【讨论】:

    【解决方案4】:

    部分原因是沟通的简洁性。字符串是一般的东西,枚举是特定的。部分原因是为了防止错误。使用字符串,您可能会出现拼写和大小写差异,从而导致错误。如果您拼写错误/错误大小写枚举,您将收到编译错误。如果你只是代表石头、纸、剪刀这三种简单的状态,它可能看起来并不太重要,但是随着你编写的代码变得越来越大,你会发现你想利用每一个机会来减少错误的变化和清晰度的表达。任何编程时间足够长的人都会有在尝试理解他们过去编写的代码时遇到很大困难的经历。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      相关资源
      最近更新 更多