C# Advent Calendar 10日目の記事です。
C# 7のリリースが近づいてきている(はず)のですが、専らC# 7の記事はVisual Studioで試しましたというのが多く、.NET Core on Linuxでは試せないのか?という疑問がありました。現時点では、.NET Core 1.0 previewとVisual Studio Code の最新版を使えばC# 7の機能を試すことができます。今回は、.NET Core SDK のDaily Build版とVS Code 1.8.0-insider+C#拡張の最新版1.5.3で試しました。
$ dotnet --info .NET Command Line Tools (1.0.0-preview5-004232) Product Information: Version: 1.0.0-preview5-004232 Commit SHA-1 hash: 355b6233cb Runtime Environment: OS Name: rhel OS Version: 7.3 OS Platform: Linux RID: rhel.7.2-x64 Base Path: /opt/dotnet/sdk/1.0.0-preview5-004232
C# 7 の機能のサンプルはこのブログのコードをそのまま持ってきて動くか確かめてみました。確認したコードは最後に載せています。
Out variables
動きます。ブログ中のコメントではPreview4では変数のスコープに制約がとありますが、それも現在はなくなっています。なお、ワイルドカードは現時点では入っていません。
Pattern matching
こちらも、定数、型、var のマッチングおよびisとswitchの拡張全部動きます。
Tuples
こちらはまだ完全には実装されていないようです。System.ValueTypeを参照してもコンパイルエラーになります。エラーのメッセージが多少おかしいので、もしかするとDaily Buildで一時的にバグとかなのかもしれないです(未調査)。
Deconstruction
Tuplesはサポートされていませんが、デコンストラクター経由のDeconstructionは動きました。
Local functions
動きます。
Literal improvements
動きます。ただ、 int.TryParse("100_000", out var i)
などは動かないようです。これが現時点での実装なのか、仕様になるのかは調べているところです。
Ref returns and locals
動きます。
Generalized async return types
現時点では動きません。
More expression bodied members
動きません。
Throw expressions
動きません。
まとめ
というわけで、半分以上はLinux上の.NET CoreでもC# 7 の機能が試せることがわかりました。なお、注意点としては、Visual Studio Code のC# 7 対応と.NET Core CLIのC# 7 対応は別物なので、VS Codeで一見通っているように見えるコードも.NET Core CLI でコンパイル/実行するとエラーになる可能性があります。