列挙型は、Java と C# では根本的に異なるものです。C# では、それらは単なる整数型の名前ですが、Java では、名前付きの既定値を持つクラスによく似ています。C# では、一連の静的な読み取り専用フィールドまたはプロパティを持つクラスは、Java が列挙型と呼ぶものであり、switch
それらに対する機能はありません。
System.Drawing.Color
このパターンはときどき現れます。System.Text.Encoding
ほとんどのものと同様に、乱用しない限り、それは良い習慣です。このパターンは通常、クラスまたは構造体に名前付きのデフォルトを提供するためにのみ使用されます。クラスが自立できること、およびこれらのプロパティの名前に大きく依存しないことを確認してください。時々何かをチェックする必要がある場合は、おそらく==
演算子をオーバーロードすることで回避できます。
Java の列挙型とまったく同じものが必要な場合は、型を内部に格納する C# 列挙型を用意し、次の 2 つのいずれかを行う必要があります。
- すべてのコンストラクターが列挙型を要求するようにする
- 列挙型を内部的に設定する名前付きデフォルトを作成する
例:
public enum FooType
{
A,
B,
C
}
public class Foo
{
public FooType Type { get; private set; }
// Option 1: forced via constructor
public Foo(FooType type)
{
this.Type = type;
}
// Option 2: static properties
// (using the constructor from option 1, can be done without it, though)
public static Foo A { get { return new Foo(FooType.A); } }
public static Foo B { get { return new Foo(FooType.B); } }
public static Foo C { get { return new Foo(FooType.C); } }
}
使用法:
Foo bar = new Foo(FooType.B);
// OR
Foo bar = Foo.B;
切り替える機能:
switch (bar.Type)
{
case FooType.A:
break;
case FooType.B:
break;
case FooType.C:
break;
}