スイッチのサポートをあきらめる必要はありません。開始整数値を設定することにより、他のさまざまな列挙型を考慮することができます。
const int baseOfCardSuit = 0;
const int baseOfGameSuit = 4;
public enum CardSuit
{
spades = baseOfCardSuit,
hearts, // 1
diamonds, // 2
clubs // 3
};
public enum GameSuit
{
suns = baseOfGameSuit
};
無効な列挙値にキャストしても、整数値は変更されません。
GameSuit a = (GameSuit) CardSuit.spades;
Console.WriteLine(a); // "0"
CardSuit b = (CardSuit) GameSuit.suns;
Console.WriteLine(b); // "4"
したがって、列挙型は交換可能です。
int value = 4; // "GameSuit.*"
switch((CardSuit)value)
{
case CardSuit.spades:
case CardSuit.hearts:
case CardSuit.diamonds:
case CardSuit.clubs:
Console.WriteLine("CardSuit.*");
break;
default:
switch((GameSuit)value)
{
case GameSuit.sums:
Console.WriteLine("GameSuit.*");
break;
default:
Console.WriteLine("Err: value not found");
break;
}
break;
}