質問です
Re: 質問です
C# 7では、switchステートメントのcase句に、値だけでなく、型を書けるようになりました。 型による条件の書き方は、前節のis演算子と同様です。 また、型による条件に加えて、when句というものを付けて追加の条件式を書くこともできます。
switch(変数)
{
case 型 変数:
// 型が一致しているときにここに来る
// その型に変換した結果が変数に入っている
break;
case 型 変数 when 条件式:
// 型が一致していて、かつ、条件式満たしているときにここに来る
break;
case 値:
// 通常の値による条件との混在も可能
break;
・
・
・
default:
// どの条件も満たさない時に実行される
break;
}
Re: 質問です
「前節」
C# 7で、is演算子やswitchステートメントのcaseが拡張されて、以下のような機能が入りました。
•caseでも、is演算子と同じように、インスタンスの型を見ての分岐ができるようになった
•x is T tや、case T tというように、型を調べつつ、型が一致してたらキャスト結果を変数tで受け取れるようになった
この機能を型スイッチ(type switch)と呼びます。
この機能は、C# 7よりもさらに先のバージョンで入る予定の「パターン マッチング(pattern matching)」という機能のうち、一番初歩的な部分だけを先に実装したものです。C# 7の時点では、型を見ての分岐(型スイッチ)だけが実装されていますが、将来的にはもっと複雑な条件を書けるようになります。
is演算子の拡張
C# 7では、is演算子で以下のような書き方ができるようになりました(型の後ろに新しい変数を書けるようになりました) 。
型を調べたい変数 is 型 新しい変数
C# 7で、is演算子やswitchステートメントのcaseが拡張されて、以下のような機能が入りました。
•caseでも、is演算子と同じように、インスタンスの型を見ての分岐ができるようになった
•x is T tや、case T tというように、型を調べつつ、型が一致してたらキャスト結果を変数tで受け取れるようになった
この機能を型スイッチ(type switch)と呼びます。
この機能は、C# 7よりもさらに先のバージョンで入る予定の「パターン マッチング(pattern matching)」という機能のうち、一番初歩的な部分だけを先に実装したものです。C# 7の時点では、型を見ての分岐(型スイッチ)だけが実装されていますが、将来的にはもっと複雑な条件を書けるようになります。
is演算子の拡張
C# 7では、is演算子で以下のような書き方ができるようになりました(型の後ろに新しい変数を書けるようになりました) 。
型を調べたい変数 is 型 新しい変数
Re: 質問です
例
[/size]
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;
}
}