【问题标题】:Is there any benefit in not enum cards c#非枚举卡c#有什么好处吗
【发布时间】:2015-08-31 13:21:45
【问题描述】:

我将在 C# 中为扑克游戏创建一个卡片类。所有需要的卡片操作都将在其他类中实现,如套牌、手牌或组合。 我应该为等级和花色使用什么类型的字段,stringenumint? 不使用枚举有什么好处吗?

【问题讨论】:

  • 整数比整个字符串对象更占用资源?你从哪里得到你的信息?
  • 是什么让您认为enum 是资源密集型的?不是。
  • 这个问题很好,除了“据我所知......”这一点,这只是反映了一个误解。如果您不介意,我将编辑该部分,并尝试提供答案。
  • 使用字符串是一个可怕的想法。字符串适用于人类,而不是计算机。简单的整数可以很容易地比较卡片、索引到查找表并表现良好。

标签: c# enums playing-cards


【解决方案1】:

我会选择enum 来衡量等级和花色。

为什么?

  • 代码的可读性。在创建类的新实例时,您可以像这样创建它:

    var card = new Card{ Rank = Rank.King, Suit = Suit.Hearts}

  • 不容易出错 - 如果西装是 int,您可以在 int.MaxValueint.MinValue 之间输入任何数字,但只有一些值才会有意义。如果你在代码中的某处写了 11 而不是 10,那就试着找出这个小错误,然后你的套牌突然就有了 5 个 K。

  • 不要害怕内存使用 - 正如 Anders Forsgren 在回答中提到的,枚举只是一个漂亮的 int。如果您只需要 8 个值,则可以将其设为 byte,这将占用大约一个字节的内存。考虑到您使用的是 C#,这可以忽略不计。枚举可以是bytesbyteshortushortintuintlongulong 中的任何一个。

所以,保留enum 并拥有更好看、更不容易出错、更快的代码。

【讨论】:

  • 实际上,您也可以将枚举的值设置为任何值,这意味着第二点仅在手动设置枚举而不是通过值 ex 设置时才重要。 { Rank = (Rank)int.MaxValue, Suit = (Suit)int.MaxValue } 将是有效的。
  • 没错,但使用枚举比整数更容易保证它的安全。您可以尝试将任何值(或 - 任何真正的值,包括对象)强制转换为枚举,但如果它不是有效值,则会引发异常。
  • 我会说它比安全更方便
【解决方案2】:

Enum 是具有有限数量选项的 值类型 的明显选择。牌位和花色非常符合这些标准。

枚举可以被认为是整数的语法糖,所以在性能方面它与使用简单整数相同。 not 在这里使用枚举没有任何好处。

【讨论】:

    【解决方案3】:

    我会说枚举是最优的。整数在性能方面具有相似的性能,但使用枚举提高了可读性,也使得分配非法值变得更加困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多