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"));
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)
{
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);
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 はマイナーバージョンアップだけあって新機能は少ないですが、よりコードを書きやすくしてくれそうですぐに使いたいですね。