質問です
Posted: 2017年6月15日(木) 14:57
switch文だと、case1.2.3.....100みたいな感じで、任意の数字までを順番に羅列しないといけないのですが、1~20まではAを表示するプログラム、21~50まではBを表示するプログラムと言った感じで、まとめて自分で範囲を決めて、動作を分割、統一できないでしょうか?
C# 7では、switchステートメントのcase句に、値だけでなく、型を書けるようになりました。 型による条件の書き方は、前節のis演算子と同様です。 また、型による条件に加えて、when句というものを付けて追加の条件式を書くこともできます。
switch(変数)
{
case 型 変数:
// 型が一致しているときにここに来る
// その型に変換した結果が変数に入っている
break;
case 型 変数 when 条件式:
// 型が一致していて、かつ、条件式満たしているときにここに来る
break;
case 値:
// 通常の値による条件との混在も可能
break;
・
・
・
default:
// どの条件も満たさない時に実行される
break;
}
static void F(object obj)
{
switch (obj)
{
case string s:
Console.WriteLine("string #" + s.Length);
break;
case 7:
Console.WriteLine("7の時だけここに来る");
break;
case int n when n > 0:
Console.WriteLine("正の数の時にここに来る " + n);
// ただし、上から順に判定するので、7 の時には来なくなる
break;
case int n:
Console.WriteLine("整数の時にここに来る" + n);
// 同上、0 以下の時にしか来ない
break;
default:
Console.WriteLine("その他");
break;
}
}