C#のswitchについてです。
次のようなenumがあるとします。
private enum Type1
{
A,
B,
C,
}
private enum Type2
{
D,
E,
F,
}
たまに下記のようなコードを見ます。
private void Sample1(Type1 type1, Type2 type2)
{
if (type1 == Type1.A && type2 == Type2.D)
{
...
}
else if (type1 == Type1.A && type2 == Type2.E)
{
...
}
else if (...)
...
}
といったように、ふたつの変数の値の組み合わせの分だけ分岐があるケースです。
これをswitchで次のように書くものも見かけます。
private void Sample2(Type1 type1, Type2 type2)
{
switch (type1)
{
case Type1.A:
switch (type2)
{
case Type2.D:
...
break;
...
}
break;
case Type1.B:
switch (type2)
{
...
}
break;
...
}
}
switchの入れ子ですね。
type2の似たようなswitchを複数箇所に書くことになるのでいまいちです。
そこで下記のようにtype1とtype2をまとめて書きます。
private void Sample3(Type1 type1, Type2 type2)
{
switch ((type1, type2))
{
case (_, Type2.D):
// type1によらず、type2がType2.Dの場合
...
break;
case (Type1.A, Type2.E):
// type1がType1.A かつ type2がType2.E の場合
...
break;
case (Type1.C, _):
// type1がType1.Cの場合
...
break;
default:
// それ以外
...
break;
}
}
古いバージョンでは使えませんが、ふたつの変数の値の組み合わせをcaseで指定できます。
