7. var bin = 0b1011; //--- New!!
var dec = 123;
var hex = 0x1F;
Binary Literals
利用可能な
数字:
0 / 1
接頭辞:
0b / 0B2 進数表記
8. var bin = 0b1100_1010; //--- 4ビットずつ
var dec = 12_345_678; //--- 通貨の区切りっぽく
var hex = 0x33_ff_cc; //--- RGB 区切り
Digit Separators
先頭 / 末尾
以外は
いくつでも
自由な
桁区切り
9. 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
関数内で
のみ使える
関数
10. 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
メモリ効率
向上
参照受け
参照返し
11. (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
の糖衣構文
多値戻り値
サポート
12. より狭い
スコープ
//--- 定数マッチング
var v = x is 123;
//--- 型マッチング
object x = "abc";
if (x is string v)
{
//--- 何か v を用いた処理
}
Pattern Matching - is -
より簡易で
厳密な判定
13. 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)
計画の一部
のみを
搭載予定