0

我有一个定义如下的类:

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将类别与特定常量值进行比较的最清晰方法是什么?

4

3 回答 3

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)
{ ... }
于 2012-11-01T16:17:10.493 回答
1

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

if(categoryId == (int)Category.CategoryOne)
{
 ...
}
else 
{
  ...
}
于 2012-11-01T16:20:24.770 回答
0

根据 Antarr Byrd 的回应,似乎使用类常量可以实现最清晰的代码。

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
}
于 2012-11-01T17:27:12.023 回答