気が付けば、Visual Studio 2017がリリースされてから2週間くらい経ってしまっているわけですが…

マイクロソフト公式のRelease CelebrationでLT登壇したり、 自分主催のリリース記念勉強会やったりとかで、 すっかり力尽きていました。

そんな感じでしたが、2点ほどそれの事後的な話。

動画

Visual Studio 2017 リリース記念勉強会、 当日にストリーミング配信とかはやらなかったんですが、 一応動画に撮っていたりはしまして。

許可が取れたものは、YouTube にアップロードしていってたりします。 C#ユーザー会でチャネルを作ったので、こちらで公開中です。

リリース版対応

C# によるプログラミング入門内から、C# 7.0がらみは「正式版ではこうなります」、「予定」、「仮」的な文面全部なくしたはず。 ついに正式リリースですよ。

ちなみに、RCからRTMの間で、C# 7.0の実装にも微妙に変更もありました。

1つ目。タプルに対する拡張メソッドの呼び出しで、オーバーロード解決時にメンバーごとの型変換を考慮してくれるようになりました。 1月25日のブログの最後の方にちょっと書いたやつです。 「『今やる』か『今後もうできないか』の2択なので、もう時間も限られているけど頑張って今やってみる」っていう状態になっていた機能が、無事に入りました。

using System;
using System.Collections.Generic;
using System.Linq;
static class Extensions
{
// IEnumerable ×2 なタプルに対する拡張メソッド
public static IEnumerable<(T x, U y)> Zip<T, U>(this (IEnumerable<T> x, IEnumerable<U> y) source) => source.x.Zip(source.y, (x, y) => (x, y));
}
class Program
{
static void Main()
{
// 配列 ×2 なタプルに対して、IEnumerable ×2 タプルの拡張メソッドを呼ぶ
var x = (new[] { 1, 2, 3 }, new[] { "a", "b", "c" }).Zip();
foreach (var (i, s) in x)
{
Console.WriteLine($"{i}: {s}");
}
}
}

2つ目。while の条件式中で宣言した変数のスコープ変更(while内のみになった)。 去年の12月にちょっと書いてたやつ。 これ、直前のRC版でもまだwhileの外にスコープ漏れてて、リリース後に確認してみたらちゃんとwhile内のみに変更掛かっていることを確認。 うちの記事にも反映させておきました。

using System;
class Program
{
static void Main()
{
while (Console.ReadLine() is string s && !string.IsNullOrEmpty(s))
{
Console.WriteLine("echo: " + s);
}
Console.WriteLine("exit");
// たぶん、RC4 のときは、s のスコープがここに漏れ出てたはず
// ちゃんと変更された。スコープが漏れ出るのは if の時だけに
}
}
view raw DecExprWhile.cs hosted with ❤ by GitHub

そういや、最近、すっかりC#のバージョン番号の書式が「C# 7.0」(.0が付く)なんですよね。 一時期は、C# 6, C# 7だったんですけども。 しれっと、いろいろとやっぱり .0 が付くように変わっていたり。 うちのサイト内の表記、どうしようかな…