Visual Studio 2017 Version 15.3.0 がリリースされました。
このリリースで C# 7.1 が使えるようになったので試してみます。
■ アップデート
Visual Studio のアップデートは ツール > 拡張機能と更新プログラム から行えます。
■ C# 7.1 の使い方
プロジェクトを新規作成しただけでは C# 7.0 しか使えません。C# 7.1 を使うには設定を行う必要があります。
1. プロジェクトのプロパティ > ビルド
2. ページの右下の [詳細設定]
3. [ビルドの詳細設定] ダイアログの 全般 > 言語バージョン を
[C# の最新のマイナーバージョン (最新)]
または
[C# 7.1]
に設定。
■ 推定タプル名の使い方
C# 7.1 の新機能の一つ 推定タプル名 を使うには nuget で System.ValueTuple をインストールする必要があります。
■ C# 7.1 の新機能
・非同期 Main メソッド
https://github.com/dotnet/csharplang/blob/master/proposals/async-main.md
Main メソッドを async にできます。
static async Task Main(string[] args) { var text = await new System.Net.Http.HttpClient().GetStringAsync("http://rksoftware.hatenablog.com/"); Console.WriteLine(new string(text.Take(200).ToArray())); Console.ReadKey(); }
・ジェネリックによるパターン マッチング
https://github.com/dotnet/csharplang/blob/master/proposals/generics-pattern-match.md
ジェネリック型の引数に対してのパターンマッチングが可能になりました。これまでは、下記の例では、Match<T>
メソッドの引数 a
に対するパターンマッチングはコンパイルエラーでした。
static void Main(string[] args) { Console.WriteLine(Match("test")); // string Console.ReadKey(); } static string Match<T>(T a) { switch (a) { case int v: return "int"; case string v: return "string"; default: return "default"; } }
・“既定” リテラル
https://github.com/dotnet/csharplang/blob/master/proposals/target-typed-default.md
型を推論できる個所では、規定値を設定する際の default(型名) の型名を省略できるようになりました。
static void Main(string[] args) { // これまでは default(int) の様に型の指定が必要だった int i = default; Console.WriteLine(i); Console.WriteLine(D()); Func<string> l = () => (string)default; Console.WriteLine(l() == null); string s = default; Console.WriteLine(s ?? default); Console.WriteLine(s == null? default:s); Console.ReadKey(); } static DateTime D() { return default; }
・推定タプル名
https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/infer-tuple-names.md
タプルの使用時に、要素の名前が推定で付けられるようになりました。推定できない場合(一つの変数が複数回使われた場合など)はこれまで通り、ItemX という名前になります。
static void Main(string[] args) { var pv = new System.Collections.Generic.KeyValuePair<int, int>(1, 2); var t1 = (pv.Value, pv.Key); // これまでは t.Item1 や t.Item2 となっていた Console.WriteLine(t1.Key); Console.WriteLine(t1.Value); int x = 3, y = 4; var t2 = (x, y); Console.WriteLine(t2.x); Console.WriteLine(t2.y); Console.ReadKey(); }
C# 7.1 はマイナーバージョンアップだけあって新機能は少ないですが、よりコードを書きやすくしてくれそうですぐに使いたいですね。