C# 何时使用枚举vs结构

C# 何时使用枚举vs结构,c#,C#,在我们的数据库中有一个名为ObjectType的表。此表仅包含一系列具有Id和ObjectName的行。在我们的后端代码中,我们以不同的方式处理不同的对象,因此经常需要引用对象的ID进行比较。这些ID始终相同,并且始终映射到同一对象 如果我的方法希望传递一个整数值给它们,那么什么构造更适合处理这些对象 我什么时候使用结构?什么时候使用枚举?您可以将整个ObjectType表读入字典中。将id映射为ObjectName。对于需要int的方法,可以传递它们objectTypeMapping[“obj

在我们的数据库中有一个名为ObjectType的表。此表仅包含一系列具有Id和ObjectName的行。在我们的后端代码中,我们以不同的方式处理不同的对象,因此经常需要引用对象的ID进行比较。这些ID始终相同,并且始终映射到同一对象

如果我的方法希望传递一个整数值给它们,那么什么构造更适合处理这些对象


我什么时候使用结构?什么时候使用枚举?

您可以将整个
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