Lesser known feature of digit separators in C# 7
As I was on the .NET.CZ podcast I realized there’s maybe a one specific behavior of digit separators in C# 7 people might not be aware of.
Digit separators in C# 7
Digit separators were introduced in C# 7 and allows you to separate digits with _
(underscore) character. Together with binary literals (not only) this allows you to logically space some groups (4 bits, 8 bits, …). Here’s a small example with hexadecimal constant: var foo = 0xFF_00_DD;
.
This feature was improved in C # 7.2 allowing you to have leading underscores. Building on previous example, this is allowed in C# 7.2: var foo = 0x_FF_00_DD;
.
Specific behavior
Not only you can have a single separator between groups/digits, but you can have as much as you want. This allows you to format the literal even more.
Compare this example.
var a = 0b__10_11__11_01;
var b = 0b_10_11_11_01;
For me, the a
is more readable. And if this is some kind of protocol, it might even nicely complement high/low bytes/words/…
var foo = 0b_01_11;
var bar = 0b_00_11;
var baz = 0b____11;
For me, the baz
clearly tells only the 11
part is important. Rest is just “padding”.
Closing
We all lived without a digit separators feature, but I see it as a welcoming formatting/readability option especially for hexadecimal and binary literals. And ability to use multiple separators in sequence makes it even more useful.
Did you know about this?