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
}

これを行うときは、ハードコードされた値を避けたいと思っています。

私は通常、この目的で列挙型を使用しますが、この場合、列挙型のクラスがすでにあるため、列挙型を構造化する方法がわかりません。1つのアイデアは、と呼ばれる別の列挙型を作成することですCategoryEnumが、これは臭いようです。もう1つのオプションは、クラス定数を使用することです。

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 に答える