using System;
using System.Runtime.InteropServices;
public class Test
{
public static void Main()
{
Console.WriteLine($"false as byte: {new LolBoolUnion(false).ByteValue}");
Console.WriteLine($"true as byte: {new LolBoolUnion(true).ByteValue}");
Console.WriteLine($"0 as bool: {new LolBoolUnion(0).BoolValue}");
Console.WriteLine($"128 as bool: {new LolBoolUnion(128).BoolValue}");
Console.WriteLine($"128 == true: {new LolBoolUnion(128).BoolValue == true}");
bool aBool = new LolBoolUnion(128).BoolValue;
switch (aBool)
{
case true:
case false:
break;
default:
Console.WriteLine("LOL");
break;
}
}
[StructLayout(LayoutKind.Explicit)]
public struct LolBoolUnion
{
[FieldOffset(0)]
public readonly byte ByteValue;
[FieldOffset(0)]
public readonly bool BoolValue;
public LolBoolUnion(byte byteValue) : this()
{
this.ByteValue = byteValue;
}
public LolBoolUnion(bool boolValue) : this()
{
this.BoolValue = boolValue;
}
}
}