当一个类已经存在时使用枚举?

时间:2012-11-01 16:13:54

标签: c# enums constants

我的课程定义如下:

public class Category
{
    public int Id {get; set;}
    public string Name {get; set;}

    //... additional properties ...
}

我的数据库中大约有10个类别,并且该集合将来不太可能发生变化(尽管可能会偶尔添加新类别)。每个类别都有许多与之相关的字段。

在大多数情况下,其他类只填充了类别Id。我需要根据特定类别执行不同的操作。

例如:

if (categoryId == 1)
{
    //do something
}
else
{
    //do something else
}

我希望在执行此操作时避免硬编码值。

我通常会为此目的使用枚举,但在这种情况下我不确定如何构造它,因为我已经有了一个类。一个想法是创建一个名为CategoryEnum的单独枚举,但这看起来很臭。另一个选择是使用类常量。

将类别Id与特定常量值进行比较的最明确方法是什么?

3 个答案:

答案 0 :(得分:1)

这个怎么样:

public enum CategoryId { ... }

public class Category
{
    public CategoryId Id {get; set;}
    public string Name {get; set;}

    //... additional properties ...
}

枚举描述了ID,而其他类则添加了其他有用的信息。


如果您想将此保留为int属性,您仍然可以使用枚举:

public enum CategoryId { ... }

public class Category
{
    public int Id {get; set;}
    public string Name {get; set;}

    //... additional properties ...
}

然后当你需要测试值时:

switch ((CategoryId)myCategory.Id)
{ ... }

答案 1 :(得分:1)

如果我理解正确排队,这应该是一个有效的实现。

if(categoryId == (int)Category.CategoryOne)
{
 ...
}
else 
{
  ...
}

答案 2 :(得分:0)

基于Antarr Byrd的response,似乎使用类常量为最清晰的代码。

public class Category
{
    public const int CATEGORY_ONE = 1;
    public const int CATEGORY_TWO = 2;
    //etc.

    public int Id {get; set;}
    public string Name {get; set;}

    //... additional properties ...
}

并进行比较:

if (categoryId == Category.CATEGORY_ONE)
{
    //do stuff
}