Mit der neuen Compiler-Platform „Roslyn“ (C# 6) waren „binary literals“ geplant (Das Feature war für C# im Status „planned“, für VB.NET schon „done“), sind nun aber nicht mehr für den nächsten Release vorgesehen.
Ein paar Vorschläge, wie man sich behelfen kann sind bei StackOverflow auch noch zu finden:
Ein anwendbarer Weg, wenn nicht zu viele Werte nötig sind, ist der Vorschlag von Markus Johnsson:
Man kann die Werte als Konstanten definieren, die mit b… beginnen:
const int b010 = 2;
const int b011 = 3;
// etc ...
Debug.Assert((b001 | b010) == b011);
Eine andere Variante (von Marc Gravell) ist, mit Strings zu arbeiten und diese zu Parsen:
Sahuagin vertritt in seiner Antwort die Meinung, dass man gefälligst mit hexadezimalen Werten rechnen lernen soll…
Aber der Vorschlag von Dmitry Tashkinov dürfte mehr Ärger verursachen als helfen, wenn er angewendet wird:
// And later
int bit5 = BitField.GetBit(bitMask, 5);
// Or
bool flag5 = BitField.GetFlag(bitMask, 5);`
// Helper class
public static class BitField
{
public static int GetBit(int bitField, int index)
{
return (bitField / (int)Math.Pow(10, index)) % 10;
}
public static bool GetFlag(int bitField, int index)
{
return GetBit(bitField, index) == 1;
}
}
Entsprechend auch der Kommentar dazu: Using int thousand to mean 1-0-0-0 is just asking for trouble.
Laut dem Blogpost von Mads Torgersen sind die binären Literale in C# 7.0 wieder vorgesehen. Mal schauen, ob sie es diesmal in den Final Release schaffen…