不枚举卡 c# 有什么好处吗
Is there any benefit in not enum cards c#
我打算在 C# 中为扑克游戏创建一张纸牌 class。所有需要的卡片操作都将在其他 classes 中实现,例如套牌或手牌或组合。
我应该为排名和花色使用什么类型的字段,string 或 enum 或 int?
不使用枚举有什么好处吗?
枚举是具有有限数量选项的值类型的明显选择。卡牌等级和花色非常符合这些标准。
枚举可以被认为是整数的语法糖,因此在性能方面它与使用简单整数相同。 not 在这里使用枚举没有任何好处。
我会说枚举是最佳的。整数在性能方面是相似的,但是使用枚举提高了可读性,也使得分配非法值变得更加困难。
对于等级和花色,我会选择 enum
。
为什么?
代码的可读性。在创建 class 的新实例时,您可以这样创建它:
var card = new Card{ Rank = Rank.King, Suit = Suit.Hearts}
不易出错 - 如果花色是 int
,您可以在 int.MaxValue
和 int.MinValue
之间输入任何数字,但只有部分值会出现有一个意义。如果您在代码中的某处写了 11 而不是 10,并且突然间您的套牌有五个 K,请尝试找出这个小错误。
- 不要害怕内存使用 - 正如 Anders Forsgren 在回答中提到的那样,enum 只是一个漂亮的 int。如果您只需要 8 个值,您可以将其设置为
byte
,这将占用大约一个字节的内存。考虑到您使用的是 C#,这可以忽略不计。枚举可以是 byte
、sbyte
、short
、ushort
、int
、uint
、long
或 ulong
。
因此,保留它 enum
并获得更好看、更不易出错、速度更快的代码。
我打算在 C# 中为扑克游戏创建一张纸牌 class。所有需要的卡片操作都将在其他 classes 中实现,例如套牌或手牌或组合。 我应该为排名和花色使用什么类型的字段,string 或 enum 或 int? 不使用枚举有什么好处吗?
枚举是具有有限数量选项的值类型的明显选择。卡牌等级和花色非常符合这些标准。
枚举可以被认为是整数的语法糖,因此在性能方面它与使用简单整数相同。 not 在这里使用枚举没有任何好处。
我会说枚举是最佳的。整数在性能方面是相似的,但是使用枚举提高了可读性,也使得分配非法值变得更加困难。
对于等级和花色,我会选择 enum
。
为什么?
代码的可读性。在创建 class 的新实例时,您可以这样创建它:
var card = new Card{ Rank = Rank.King, Suit = Suit.Hearts}
不易出错 - 如果花色是
int
,您可以在int.MaxValue
和int.MinValue
之间输入任何数字,但只有部分值会出现有一个意义。如果您在代码中的某处写了 11 而不是 10,并且突然间您的套牌有五个 K,请尝试找出这个小错误。- 不要害怕内存使用 - 正如 Anders Forsgren 在回答中提到的那样,enum 只是一个漂亮的 int。如果您只需要 8 个值,您可以将其设置为
byte
,这将占用大约一个字节的内存。考虑到您使用的是 C#,这可以忽略不计。枚举可以是byte
、sbyte
、short
、ushort
、int
、uint
、long
或ulong
。
因此,保留它 enum
并获得更好看、更不易出错、速度更快的代码。