我将在c#中为扑克游戏创建一个纸牌类。所有与纸牌相关的必要行动都将在其他类别中执行,如桥牌、手牌或组合。我应该为rank和suit使用什么类型的字段,string或enum或int?不使用枚举有什么好处吗?
等级和花色我都选enum
。
为什么?
-
代码的可读性。在创建类的新实例时,您可以这样创建它:
var card = new Card{ Rank = Rank.King, Suit = Suit.Hearts}
-
更不容易出错-如果suit是
int
,您可以在int.MaxValue
和int.MinValue
之间放置任何数字,但只有一些值将具有意义。如果你在代码的某个地方写了11而不是10,那么你的桥牌突然有了5张国王,你就可以试着找到这个小bug了。 - 不要害怕内存使用- enum只是一个好看的整型,正如Anders Forsgren在回答中提到的。如果你只需要8个值,你可以将它设置为
byte
,这将占用大约一个字节的内存。考虑到你正在使用c#,这是可以忽略不计的。取值为:byte
、sbyte
、short
、ushort
、int
、uint
、long
、ulong
。
所以,保持它的enum
和更好看,更少出错,更快的代码。
Enum显然是具有有限选项的值类型的选择。卡片的等级和花色非常符合这些标准。
枚举可以被认为是整数的语法糖,因此在性能方面,它与使用简单整数相同。如果不是使用枚举,那么
我认为枚举是最优的。整数在性能方面也会有类似的表现,但是使用enum提高了可读性,也使得分配非法值变得更加困难。