予習:.NET 5 Preview 4(Preview5はこれから見る)

C#9が使えるのは.NET 5だけ

Buildは少し観測しつつ、de:codeでキャッチアップするゆとり勢なので、ようやく予習を始める。

MAUI

devblogs.microsoft.com github.com => 旧Xamarin Forms(まだ名前空間をリネームしただけ。)

.NET 5(In C# 9)

devblogs.microsoft.com

Native Int

a.k.a. IntPtr IntPtrのエイリアスで、整数演算ができるようになった。ものらしい。 intとの違いはCPU Native。 32bit CPUなら32bit整数、64bitなら64bit整数 C#単体というよりC++等CPUネイティブなアレとのジョイントがある場合に重宝するのかしら? 普段そういったことをしていないのでわからず……。

Target Typed New

所謂左辺から型推論するアレ。コード量が減る印象。

        [HttpPost]
        public List<WeatherForecast> Post() => new()
        {
            new(){ Date = DateTime.Now, TemperatureC = 20, Summary = "test_now" },
            new(){ Date = DateTime.Now.AddHours(2), TemperatureC = 19, Summary = "test_now_plus_2_hours" },
            new(){ Date = DateTime.Now.AddHours(4), TemperatureC = 18, Summary = "test_now_plus_4_hours" }
        };

なお、C#8までは

        [HttpPost]
        public List<WeatherForecast> Post() => new List<WeatherForecast>
        {
            new WeatherForecast { Date = DateTime.Now, TemperatureC = 20, Summary = "test_now" },
            new WeatherForecast { Date = DateTime.Now.AddHours(2), TemperatureC = 19, Summary = "test_now_plus_2_hours" },
            new WeatherForecast { Date = DateTime.Now.AddHours(4), TemperatureC = 18, Summary = "test_now_plus_4_hours" }
        };

とかになる。 メソッド呼び出し時も左辺から型推論になるはずなので、よく使うことになりそう。

Type Switch (C# 9.0 ver)

        public WeatherForecast GetResponsesByStatusCode(int statusCode) => statusCode switch
        {
            < 600 and >= 500 => new() { Date = DateTime.Now, TemperatureC = 20, Summary = "server_error_pattern" },
            < 500 and >= 400 => new() { Date = DateTime.Now, TemperatureC = 20, Summary = "request_error_pattern" },
            < 400 and >= 200 => new() { Date = DateTime.Now, TemperatureC = 20, Summary = "request_success_pattern" },
            _ => throw new ArgumentException(nameof(statusCode))
        };

色々使える予約語が増えていたりと、便利に気持ち悪く進化してきている印象。 型スイッチはC# 7 以降で、コード表現の向上のために色々入ってきているので使っていきたい。

型スイッチでは、and, or, notキーワードが追加されている。 これで、ずっと書きたかった、 

if(hoge is not null){ } 

が書けるようになる。 今までは

if(!hoge is null )

とか、書いていたり、andとかor条件だった場合にはさらにかっこがネストされたりするのがなくなるのは嬉しいので歓迎したい。