十分に活用されていない (しかし完全に有効な) 手法は、一連の定数を定義するクラスを使用することです。クラスとして、列挙値の他の側面を説明できる追加のプロパティを追加できます。興味深いことに、これはほとんどの列挙型が Java で実装される方法です (列挙型には特別なキーワードはありません)。
この方法をとる場合は、クラス自体だけがインスタンスを定義できるように、クラスをシールしてプライベート コンストラクターを定義することをお勧めします。次に例を示します。
public static class Position
{
private PlayerPosition (string name, bool isDefensive ) {
this.Name = name
this.IsDefensive = isDefensive ;
}
// any properties you may need...
public string Name { get; private set; }
public bool IsDefensive { get; private set; }
public bool IsOffensive { get { return !IsDefensive; } }
// static instances that act like an enum
public static readonly Quarterback = new PlayerPosition( "Quarterback", false );
public static readonly Runningback = new PlayerPosition( "Runningback", false );
public static readonly Linebacker = new PlayerPosition( "Linebacker", true );
// etc...
}
このような列挙型を使用すると、属性よりも洗練された単純な構文になります。
if( PlayerPosition.Quarterback.IsDefensive )
{
// ...
}