プロさんのおうち   ~プログラムのサンプル置き場~


is演算子とswith文の拡張


is演算子、switch文の拡張としてパターンマッチング機能がC#7で追加されました。

null比較や型比較が新たに可能になったので実際にやってみようと思います。

is演算子、switch文共に拡張された内容は同じような感じです。

is演算子拡張

まず、is演算子です。


// is拡張
// 定数との比較ができる。
if (obj is null)
{
    Console.WriteLine("NULL");
}
else if (obj is int.MaxValue)
{
    Console.WriteLine(string.Format("int MaxValue = {0}", obj));
}
// 該当する型の場合のみ、変数に変換できる。
else if (obj is string str)
{
    Console.WriteLine(string.Format("String value = {0}", str));
}
// varでの比較ができる。
else if (obj is var tmp)
{
    Console.WriteLine(tmp.ToString());
}
				

個人的にはint.MaxValueのような定数との比較、型比較の際に変数にキャストできるのが便利だなと思います。

switch文拡張

次に、switch文です。


// switch文拡張
switch (obj)
{
    // 該当する型の場合のみ、変数に変換できる。
    case string str when (str != "bug"):
        Console.WriteLine(str);
        break;
    case int i:
        Console.WriteLine(i);
        break;
    // varから派生するパターンでも利用可能
    case var tmp when ((tmp != null) && Enum.IsDefined(typeof(DayOfWeek), tmp)):
        Console.WriteLine(tmp.ToString());
        break;
    case var tmpNull when (tmpNull == null):
        Console.WriteLine("NULL");
        break;
    default:
        break;
}
				

is演算子拡張とほぼ同じ内容であることがわかると思います。

どちらも知っていればすごく便利ですね。

参考URL


メニューに戻る


CopyRight 2019 株式会社PUreatio