在我们的数据库中,我们有一个名为ObjectType的表。该表只包含一系列带有Id和ObjectName的行。在我们的后端代码中,我们以不同的方式处理不同的对象,因此通常需要引用对象的ID进行比较。这些ID始终相同,并且它们始终映射到同一对象。
如果我的方法期望将整数值传递给它们,那么处理这些对象的构造会更好吗?
我什么时候使用结构?我什么时候使用枚举?
答案 0 :(得分:4)
枚举不能与结构互换。它们有完全不同的用法。结构可以包含成员和方法,但枚举只能包含标签的标签和值。
您可以使用枚举来指定系统的不同行为
假设你有一个班级的人,让我们说一个人可以有一个情绪化的状态。
一个好的实现会使用这样的枚举:
enum EmotionalState
{
Happy = 3,
Sad,
Shy
}
您可以将枚举项目用作以下整数:
int b = (int)EmotionalState.Sad // <---4
也是反方向
int v = 3;
EmotionalState s = (EmotionalState)v; // Happy
请注意,枚举成员没有类型。他们也可以被分配一个起始值。因此,例如,如果您在第一个项目上分配3,则下一个项目将标记为4.
结构的一个很好的例子是Point
struct Point {
int a;
int b;
}
结构应该很小,因为它们是值类型,并且保存在堆栈中,其中引用类型保留在堆上。
答案 1 :(得分:2)
struct
不是enum
的替代品,它是class
的替代品。只是内存布局在结构和类中是不同的。
如果您不需要遵循代码并支持添加到数据库中的新条目,我会选择枚举。
否则,如果您需要支持新的数据库,我会考虑Dictionary<int, string>
答案 2 :(得分:0)
您可以将整个ObjectType
表读入Dictionary<string, int>
。使用id
映射ObjectName
。对于期望int的方法,您可以传递它们objectTypeMapping["objectName"]
。
答案 3 :(得分:0)
枚举是一个可以选择的不同选项的列表,一个结构用于存储变量(是的,它类似于类,但主要用于存储数据)
enum Sports {
Soccer, Tennis, Football, Baseball
}
会输出:Sports.
| Soccer |
| Tennis |
| Footbal |
| Baseball |