銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

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