何时使用Enum vs Struct

时间:2015-09-30 14:59:04

标签: c#

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

如果我的方法期望将整数值传递给它们,那么处理这些对象的构造会更好吗?

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

4 个答案:

答案 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 |