不枚举卡 c# 有什么好处吗

Is there any benefit in not enum cards c#

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

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

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

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

对于等级和花色,我会选择 enum

为什么?

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

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

  • 不易出错 - 如果花色是 int,您可以在 int.MaxValueint.MinValue 之间输入任何数字,但只有部分值会出现有一个意义。如果您在代码中的某处写了 11 而不是 10,并且突然间您的套牌有五个 K,请尝试找出这个小错误。

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

因此,保留它 enum 并获得更好看、更不易出错、速度更快的代码。