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で指定できます。