気が付けば、Visual Studio 2017がリリースされてから2週間くらい経ってしまっているわけですが…
マイクロソフト公式のRelease CelebrationでLT登壇したり、 自分主催のリリース記念勉強会やったりとかで、 すっかり力尽きていました。
そんな感じでしたが、2点ほどそれの事後的な話。
- リリース記念勉強会の動画上げました
- C# によるプログラミング入門、リリース版対応しました
動画
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 の時だけに | |
} | |
} |
そういや、最近、すっかりC#のバージョン番号の書式が「C# 7.0」(.0が付く)なんですよね。 一時期は、C# 6, C# 7だったんですけども。 しれっと、いろいろとやっぱり .0 が付くように変わっていたり。 うちのサイト内の表記、どうしようかな…