引数として整数を取る関数があるとします。整数値を整理する方法として、列挙リストを使用できるようにしたいと考えています。
たとえば、理想的には、これら (疑似コード) を定義できるようにしたいと考えています。
public enum days
{
monday,
tuesday,
etc...
}
public enum months
{
january,
february,
etc...
}
int doSomething(enum x)
{
return x + 1;
}
次に、次のように列挙されたリストのいずれかを使用して関数を呼び出すことができます。
int a = doSomething(days.monday);
int y = doSomething(months.february);
doSomething は、列挙型の 1 つだけ (すなわち、日または月) を使用して定義する必要があるため、これは明らかにそのままでは機能しません。私はいくつかのオプションを知っています。1 つは単純に int にキャストする方法です。
int a = doSomething((int)days.monday);
int y = doSomething((int)months.february);
これに関する唯一の問題は、この関数がコード内の多くの場所で呼び出されることであり、"(int)" をあちこちに配置しなければならないのは不器用です (これらの int 値を列挙型にグループ化する主な動機の 1 つです)。最初の場所は、コードをより読みやすくすることです)。
別のオプションは、列挙型を完全に回避し、代わりに値を次のようなコンテナ クラスにバンドルすることです。
static class Days
{
static int x = 0;
static int monday = x++;
static int tuesday = x++;
}
繰り返しますが、これは機能しますが、これらのコンテナー クラスを定義する必要がある場合は、非常に面倒に思えます。
答えは、これ以上簡単な方法はなく、大人になってこれらのオプションの 1 つを受け入れる必要があるということかもしれません。しかし、私はそれにコミットする前に、それについて健全性チェックを受けると思っていました。3番目のオプションはありますか?