C# 何时使用枚举vs结构
在我们的数据库中有一个名为ObjectType的表。此表仅包含一系列具有Id和ObjectName的行。在我们的后端代码中,我们以不同的方式处理不同的对象,因此经常需要引用对象的ID进行比较。这些ID始终相同,并且始终映射到同一对象 如果我的方法希望传递一个整数值给它们,那么什么构造更适合处理这些对象C# 何时使用枚举vs结构,c#,C#,在我们的数据库中有一个名为ObjectType的表。此表仅包含一系列具有Id和ObjectName的行。在我们的后端代码中,我们以不同的方式处理不同的对象,因此经常需要引用对象的ID进行比较。这些ID始终相同,并且始终映射到同一对象 如果我的方法希望传递一个整数值给它们,那么什么构造更适合处理这些对象 我什么时候使用结构?什么时候使用枚举?您可以将整个ObjectType表读入字典中。将id映射为ObjectName。对于需要int的方法,可以传递它们objectTypeMapping[“obj
我什么时候使用结构?什么时候使用枚举?您可以将整个
ObjectType
表读入字典中。将id
映射为ObjectName
。对于需要int的方法,可以传递它们objectTypeMapping[“objectName”]
您可以将整个ObjectType
表读入字典中。将id
映射为ObjectName
。对于需要int的方法,可以传递它们objectTypeMapping[“objectName”]
struct
不是enum
的替代品,而是类的替代品。它只是结构和类中不同的内存布局
如果您不需要遵循代码并支持将新条目添加到数据库中,我会选择枚举
否则,如果需要支持新的数据库,我会考虑<代码>字典< /p> < p> <代码>结构> <代码>并不是<代码> EnUM <代码>的替代,它是<代码>类< /代码>的替代。它只是结构和类中不同的内存布局
如果您不需要遵循代码并支持将新条目添加到数据库中,我会选择枚举
否则,如果你需要支持新的数据库,我会考虑一个<代码>字典<代码> < /p> 枚举不能用结构互换。它们有完全不同的用法。结构可以有成员和方法,但枚举只能有标签和标签值
可以使用枚举指定系统的不同行为
比如说,你有一个普通人,也就是说,不管出于什么原因,一个人都可能有情绪状态
一个好的实现将使用如下枚举:
enum EmotionalState
{
Happy = 3,
Sad,
Shy
}
可以将枚举项用作整数,如下所示:
int b = (int)EmotionalState.Sad // <---4
请注意,枚举成员没有类型。也可以为它们指定一个起始值。因此,例如,如果您在第一项上指定3,则下一项将标记为4
结构的一个好例子是点
struct Point {
int a;
int b;
}
结构应该很小,因为它们是值类型,并且保存在堆栈上,而as引用类型保存在堆上。枚举不能与结构互换。它们有完全不同的用法。结构可以有成员和方法,但枚举只能有标签和标签值
可以使用枚举指定系统的不同行为
比如说,你有一个普通人,也就是说,不管出于什么原因,一个人都可能有情绪状态
一个好的实现将使用如下枚举:
enum EmotionalState
{
Happy = 3,
Sad,
Shy
}
可以将枚举项用作整数,如下所示:
int b = (int)EmotionalState.Sad // <---4
请注意,枚举成员没有类型。也可以为它们指定一个起始值。因此,例如,如果您在第一项上指定3,则下一项将标记为4
结构的一个好例子是点
struct Point {
int a;
int b;
}
结构应该很小,因为它们是值类型,并且保存在堆栈上,而引用类型保存在堆栈上。枚举是可以选择的不同选项的列表,结构用于存储变量(是的,它类似于类,但主要用于存储数据)
将输出:Sports。
|足球|
|网球|
|足球|
|Barball |
枚举是一个可选择的不同选项列表,结构用于存储变量(是的,它类似于类,但主要用于存储数据)
将输出:Sports。
|足球|
|网球|
|足球|
|棒球|
我首先想到的是一个类。我首先想到的是一个类。本质上,我想做的是能够使用对象中包含的整数值来确定选择的对象,然后使用Id来操作其他记录。例如,说ObjectType.User
将返回9,因此在我的代码中,我可以将此值分配给另一个记录/变量,但也可以将其用于比较。这些值不需要从数据库中获取,因为它们几乎不可能发生更改。缺点:您需要使它们与数据库保持同步本质上,我想做的是能够使用对象中包含的整数值来确定选择的对象,然后使用Id来操作其他记录。例如,说ObjectType.User
将返回9,因此在我的代码中,我可以将此值分配给另一个记录/变量,但也可以将其用于比较。这些值不需要从数据库中获取,因为它们几乎不可能发生更改。缺点:您需要使它们与数据库保持同步。我唯一真正需要的是能够看到每个对象中存储的Id/值。这样,如果我说var-someVar=ObjectType.Role
,我就可以给someVar
分配一个整数值。如果(objectType==15){}
,它也会使我的代码更具可读性,因为我不会说。当我在多个插入/查询中使用数字Id时,我只需要确保分配给变量的值保持易于访问。在t