xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

数値セパレーター

C# 6.0 までの数値リテラルでは、桁数がどれだけになっても区切り文字を入れることができませんでした。今回 C# 7 で数値セパレーター (= Digit Separators) という機能が追加され、数値リテラルを自由に桁区切りしてグルーピングできるようになりました。

区切り文字として利用できるものは _ のみ。特に前回紹介した 2 進リテラルと一緒に使うと便利そうです。

var bin  = 0b1100_1010;  //--- 4 ビットずつ
var dec  = 12_345_678;   //--- 通貨などでよくある 3 桁区切り
var hex  = 0x33_ff_cc;   //--- RGB で区切ってみたり

詰まるところ _ は表記上の完全なオマケで、解釈としては _ がないものと同一になります。なので、例えば以下のふたつは同じです。

double real = 1_000.123_4e-3_0;  //--- だいぶ読みづらいけど
double real = 1000.1234e-30;     //--- これと同じ

いくつ入れても OK

ザッと試してみたところ、以下のようにセパレーターをいくつ並べても大丈夫でした。やり過ぎる意味はないですが、だいぶ自由にできそうです。

var bin = 0b1_0__1___0____0_____1;

先頭と末尾に入れるのはダメ

セパレーターの個数には自由度がありますが、入れる場所には制限がありました。数値の先頭と末尾には入れられません。ちゃんと「区切り」なさいということですね。

//--- 先頭はダメ
var bin = 0b___1010;
var dec = ___12_345;
var hex = 0x___1f2d;

//--- 末尾もダメ
var bin = 0b1010_0011___;
var dec = 123_456___m;  //--- decimal などの接尾辞を入れてもダメ
var hex = 0x11_ff___;