C#ユーザー会 //build/ 2016 振り返り勉強会
鈴木 孝明
C# 7 New Features
- 30 分で感じる C# の未来 -
Name
鈴木 孝明
Twitter Account
@xin9le
Award
Microsoft MVP for Visual Studio
and Development Technologies
Web Site
http://xin9le.net
About Me
Highest Awards
Musician’s Hackathon 2015
SPAJAM 2016 東京C予選
Library
DeclarativeSql
世界で最も簡単な CRUD と Bulk Insert の提供 (自分調べ)
Recent Activities
「最新の」コンパイラで試す C# 7 の新機能たち
Demo
次期バージョンの目標
さらなる書きやすさの追求
パフォーマンス向上
セッション動画
//build/ 2016 のセッションは Channel 9 で絶賛公開中
https://channel9.msdn.com/Events/Build/2016/B889
The Future of C#
デモの内容を簡単におさらい
New Features
var bin = 0b1011; //--- New!!
var dec = 123;
var hex = 0x1F;
Binary Literals
利用可能な
数字:
0 / 1
接頭辞:
0b / 0B2 進数表記
var bin = 0b1100_1010; //--- 4ビットずつ
var dec = 12_345_678; //--- 通貨の区切りっぽく
var hex = 0x33_ff_cc; //--- RGB 区切り
Digit Separators
先頭 / 末尾
以外は
いくつでも
自由な
桁区切り
static void Main()
{
IEnumerable<T> twice<T>(T x)
where T : struct
{
yield return x;
yield return x;
}
var xs = twice(12.3);
}
Local Functions
Generics
yield
なんでもOK
関数内で
のみ使える
関数
static void Main()
{
var a = new int[] { 0, 1, 2, 3, 4 };
ref var d = ref GetValue(a);
d = 5;
// 0, 1, 5, 3, 4
}
static ref int GetValue(int[] b)
{
ref var c = ref b[2];
return ref c;
}
Ref Locals / Ref Returns
メモリ効率
向上
参照受け
参照返し
(int sum, int count) Tally(IEnumerable<int> list)
{
var s = 0; var c = 0;
foreach (var x in list)
{
s += x;
c++;
}
return (s, c);
}
var t = Tally(new []{ 1, 2, 3 });
Tuples
ValueTuple
の糖衣構文
多値戻り値
サポート
より狭い
スコープ
//--- 定数マッチング
var v = x is 123;
//--- 型マッチング
object x = "abc";
if (x is string v)
{
//--- 何か v を用いた処理
}
Pattern Matching - is -
より簡易で
厳密な判定
object x = 123;
switch (x)
{
case "abc":
break;
case int v when 100 < v: //--- v が 100 より大きいとき
break;
case int v: //--- v が 100 以下のとき
break;
}
Pattern Matching - switch -
より強力な
条件分岐
when 句での
条件設定
(case guard)
計画の一部
のみを
搭載予定
Learn more…
C# vNext
http://blog.xin9le.net/entry/csharp-vnext
Enjoy new features and future of C#!!
Thank you
using CSharp;

C# 7 New Features