public struct MyBool
{
private byte _val;
public byte Value
{
get { return _val; }
set { _val = (byte)(value == 0 ? 0 : 1); }
}
public MyBool(int a)
{
_val = (byte)(a == 0 ? 0 : 1);
}
public override string ToString()
{
return _val == 0 ? "0" : "1";
}
public override int GetHashCode()
{
return _val;
}
public override bool Equals(object obj)
{
return _val == ((MyBool)obj).Value;
}
public static implicit operator MyBool(int a)
{
return new MyBool(a);
}
public static implicit operator int(MyBool a)
{
return a._val;
}
}
MyBool[] arr1 = {1, 0, 1, 1, 0, 0, 0, 1};
MyBool[] arr2 = {1, 0, 2, 3, 0, 0, 0, -5};
// автоматически преобразуется в {1, 0, 1, 1, 0, 0, 0, 1}
// во всех си-подобных языках не-ноль - это истина