Linux でも C# 7 を使いたい

C# Advent Calendar 10日目の記事です。

qiita.com

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で試しました。

github.com

marketplace.visualstudio.com

$ 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 の機能のサンプルはこのブログのコードをそのまま持ってきて動くか確かめてみました。確認したコードは最後に載せています。

blogs.msdn.microsoft.com

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 でコンパイル/実行するとエラーになる可能性があります。

gist.github.com

コメントを書く

Linux でも C# 7 を使いたい

プロフィール
id:tanaka733 はてなブログPro

Twitter: @tanaka_733 Microsoft MVP for Azure このサイトでは、トラフィックの分析と広告の測定を目的として Cookie が使用されます。 詳細など、このブログに関するお問い合わせはこちらから https://forms.gle/UiBRq4ztZu5bYqeo7

注目記事