System.Boolean
using System.Runtime.InteropServices;
using System.Globalization;
namespace System
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi), Serializable, ComVisible(true)]
public struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool>
{
internal const int True = (int)0x00000001;
internal const int False = (int)0x00000000;
internal const string TrueLiteral = "True";
internal const string FalseLiteral = "False";
private bool m_value; //使用的是ILASM的bool关键字的概念
private static char[] m_trimmableChars;
public static readonly string TrueString;
public static readonly string FalseString;
public override int GetHashCode()
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: brtrue.s IL_0006
//IL_0004: ldc.i4.0
//IL_0005: ret
//IL_0006: ldc.i4.1
//IL_0007: ret
if (this)
{
return 1;
}
else
{
return 0;
}
}
public override string ToString()
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: brtrue.s IL_000a
//IL_0004: ldstr "False"
//IL_0009: ret
//IL_000a: ldstr "True"
//IL_000f: ret
if (this)
{
return "True";
}
else
{
return "False";
}
}
public sealed new virtual string ToString(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: brtrue.s IL_000a
//IL_0004: ldstr "False"
//IL_0009: ret
//IL_000a: ldstr "True"
//IL_000f: ret
if (this)
{
return "True";
}
else
{
return "False";
}
}
public override bool Equals(object obj)
{
//.maxstack 8
//IL_0000: ldarg.1
//IL_0001: isinst System.Boolean
//IL_0006: brtrue.s IL_000a
//IL_0008: ldc.i4.0
//IL_0009: ret
//IL_000a: ldarg.0
//IL_000b: ldind.i1
//IL_000c: ldarg.1
//IL_000d: unbox.any System.Boolean
//IL_0012: ceq
//IL_0014: ret
if ((obj as Boolean) == null) return false;
else return (this == (bool)obj);
}
public sealed new virtual bool Equals(bool obj)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: ldarg.1
//IL_0003: ceq
//IL_0005: ret
return (this == obj);
}
public sealed new virtual int CompareTo(object obj)
{
//.maxstack 8
//IL_0000: ldarg.1
//IL_0001: brtrue.s IL_0005
//IL_0003: ldc.i4.1
//IL_0004: ret
//IL_0005: ldarg.1
//IL_0006: isinst System.Boolean
//IL_000b: brtrue.s IL_001d
//IL_000d: ldstr "Arg_MustBeBoolean"
//IL_0012: call string System.Environment::GetResourceString(string)
//IL_0017: newobj instance void System.ArgumentException::.ctor(string)
//IL_001c: throw
//IL_001d: ldarg.0
//IL_001e: ldind.i1
//IL_001f: ldarg.1
//IL_0020: unbox.any System.Boolean
//IL_0025: bne.un.s IL_0029
//IL_0027: ldc.i4.0
//IL_0028: ret
//IL_0029: ldarg.0
//IL_002a: ldind.i1
//IL_002b: brtrue.s IL_002f
//IL_002d: ldc.i4.m1
//IL_002e: ret
//IL_002f: ldc.i4.1
//IL_0030: ret
if(obj==null) return 1;
else
{
if ((obj as bool) == null)
{
throw new ArgumentException(Environment.GetResourceString("Arg_MustBeBoolean"));
}
else
{
if (this == (bool)obj) return 0;
else
{
if (this)
{
return 1;
}
else
{
return -1;
}
}
}
}
}
public sealed new virtual int CompareTo(bool @value)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: ldarg.1
//IL_0003: bne.un.s IL_0007
//IL_0005: ldc.i4.0
//IL_0006: ret
//IL_0007: ldarg.0
//IL_0008: ldind.i1
//IL_0009: brtrue.s IL_000d
//IL_000b: ldc.i4.m1
//IL_000c: ret
//IL_000d: ldc.i4.1
//IL_000e: ret
if(this==@value)
{
return 0;
}
else
{
if(this)
{
return 1;
}
else
{
return -1;
}
}
}
public static bool Parse(string @value)
{
//.maxstack 2
//.locals init (bool V_0)
//IL_0000: ldarg.0
//IL_0001: brtrue.s IL_000e
//IL_0003: ldstr "value"
//IL_0008: newobj instance void System.ArgumentNullException::.ctor(string)
//IL_000d: throw
//IL_000e: ldc.i4.0
//IL_000f: stloc.0
//IL_0010: ldarg.0
//IL_0011: ldloca.s V_0
//IL_0013: call bool System.Boolean::TryParse(string,
// bool&)
//IL_0018: brtrue.s IL_002a
//IL_001a: ldstr "Format_BadBoolean"
//IL_001f: call string System.Environment::GetResourceString(string)
//IL_0024: newobj instance void System.FormatException::.ctor(string)
//IL_0029: throw
//IL_002a: ldloc.0
//IL_002b: ret
bool V_0;
if (@value == null)
{
throw new ArgumentNullException("@value");
}
else
{
V_0 = false;
if (Boolean.TryParse(@value, out V_0))
{
return V_0;
}
else
{
throw new FormatException(Environment.GetResourceString("Format_BadBoolean"));
}
}
}
public static bool TryParse(string @value, out bool result)
{
//.maxstack 3
//.locals init (char[] V_0)
//IL_0000: ldarg.1
//IL_0001: ldc.i4.0
//IL_0002: stind.i1
//IL_0003: ldarg.0
//IL_0004: brtrue.s IL_0008
//IL_0006: ldc.i4.0
//IL_0007: ret
//IL_0008: ldstr "True"
//IL_000d: ldarg.0
//IL_000e: ldc.i4.5
//IL_000f: callvirt instance bool System.String::Equals(string,
// valuetype System.StringComparison)
//IL_0014: brfalse.s IL_001b
//IL_0016: ldarg.1
//IL_0017: ldc.i4.1
//IL_0018: stind.i1
//IL_0019: ldc.i4.1
//IL_001a: ret
//IL_001b: ldstr "False"
//IL_0020: ldarg.0
//IL_0021: ldc.i4.5
//IL_0022: callvirt instance bool System.String::Equals(string,
// valuetype System.StringComparison)
//IL_0027: brfalse.s IL_002e
//IL_0029: ldarg.1
//IL_002a: ldc.i4.0
//IL_002b: stind.i1
//IL_002c: ldc.i4.1
//IL_002d: ret
//IL_002e: ldsfld char[] System.Boolean::m_trimmableChars
//IL_0033: brtrue.s IL_0064
//IL_0035: ldsfld char[] System.String::WhitespaceChars
//IL_003a: ldlen
//IL_003b: conv.i4
//IL_003c: ldc.i4.1
//IL_003d: add
//IL_003e: newarr System.Char
//IL_0043: stloc.0
//IL_0044: ldsfld char[] System.String::WhitespaceChars
//IL_0049: ldloc.0
//IL_004a: ldsfld char[] System.String::WhitespaceChars
//IL_004f: ldlen
//IL_0050: conv.i4
//IL_0051: call void System.Array::Copy(class System.Array,
// class System.Array,
// int32)
//IL_0056: ldloc.0
//IL_0057: ldloc.0
//IL_0058: ldlen
//IL_0059: conv.i4
//IL_005a: ldc.i4.1
//IL_005b: sub
//IL_005c: ldc.i4.0
//IL_005d: stelem.i2
//IL_005e: ldloc.0
//IL_005f: stsfld char[] System.Boolean::m_trimmableChars
//IL_0064: ldarg.0
//IL_0065: ldsfld char[] System.Boolean::m_trimmableChars
//IL_006a: callvirt instance string System.String::Trim(char[])
//IL_006f: starg.s 'value'
//IL_0071: ldstr "True"
//IL_0076: ldarg.0
//IL_0077: ldc.i4.5
//IL_0078: callvirt instance bool System.String::Equals(string,
// valuetype System.StringComparison)
//IL_007d: brfalse.s IL_0084
//IL_007f: ldarg.1
//IL_0080: ldc.i4.1
//IL_0081: stind.i1
//IL_0082: ldc.i4.1
//IL_0083: ret
//IL_0084: ldstr "False"
//IL_0089: ldarg.0
//IL_008a: ldc.i4.5
//IL_008b: callvirt instance bool System.String::Equals(string,
// valuetype System.StringComparison)
//IL_0090: brfalse.s IL_0097
//IL_0092: ldarg.1
//IL_0093: ldc.i4.0
//IL_0094: stind.i1
//IL_0095: ldc.i4.1
//IL_0096: ret
//IL_0097: ldc.i4.0
//IL_0098: ret
char[] V_0;
result = false;
if (@value == null)
{
return false;
}
else
{
if ("True".Equals(@value, StringComparison.OrdinalIgnoreCase))
{
result = true;
return true;
}
else
{
if ("False".Equals(@value, StringComparison.OrdinalIgnoreCase))
{
result = false;
return true;
}
else
{
if (System.Booleanm_trimmableChars == null)
{
V_0 = new char[System.String.WhitespaceChars.Length + 1];
Array.Copy(String.WhitespaceChars, V_0, String.WhitespaceChars.Length);
V_0[V_0.Length - 1] = '\u0000';
Boolean.m_trimmableChars = V_0;
}
@value = @value.Trim(Boolean.m_trimmableChars);
if ("True".Equals(@value, StringComparison.OrdinalIgnoreCase))
{
result = true;
return true;
}
else
{
if ("False".Equals(@value, StringComparison.OrdinalIgnoreCase))
{
result = false;
return true;
}
else
{
return false;
}
}
}
}
}
}
public new virtual sealed System.TypeCode GetTypeCode()
{
//.maxstack 8
//IL_0000: ldc.i4.3
//IL_0001: ret
return TypeCode.Boolean;
}
private new virtual sealed bool IConvertible.ToBoolean(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: ret
return this;
}
private new virtual sealed char IConvertible.ToChar(System.IFormatProvider provider)
{
//.maxstack 5
//.locals init (object[] V_0)
//IL_0000: call class System.Globalization.CultureInfo System.Globalization.CultureInfo::get_CurrentCulture()
//IL_0005: ldstr "InvalidCast_FromTo"
//IL_000a: call string System.Environment::GetResourceString(string)
//IL_000f: ldc.i4.2
//IL_0010: newarr System.Object
//IL_0015: stloc.0
//IL_0016: ldloc.0
//IL_0017: ldc.i4.0
//IL_0018: ldstr "Boolean"
//IL_001d: stelem.ref
//IL_001e: ldloc.0
//IL_001f: ldc.i4.1
//IL_0020: ldstr "Char"
//IL_0025: stelem.ref
//IL_0026: ldloc.0
//IL_0027: call string System.String::Format(class System.IFormatProvider,
// string,
// object[])
//IL_002c: newobj instance void System.InvalidCastException::.ctor(string)
//IL_0031: throw
object[] V_0;
V_0 = new object[2];
V_0[0] = "Boolean";
V_0[1] = "Char";
throw new InvalidCastException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("InvalidCast_FromTo"), V_0));
}
private new virtual sealed sbyte IConvertible.ToSByte(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call int8 System.Convert::ToSByte(bool)
//IL_0007: ret
return Convert.ToSByte(this);
}
private new virtual sealed byte IConvertible.ToByte(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call uint8 System.Convert::ToByte(bool)
//IL_0007: ret
return Convert.ToByte(this);
}
private new virtual sealed short IConvertible.ToInt16(System.IFormaProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call int16 System.Convert::ToInt16(bool)
//IL_0007: ret
return Convert.ToInt16(this);
}
private new virtual sealed ushort IConvertible.ToUInt16(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call uint16 System.Convert::ToUInt16(bool)
//IL_0007: ret
return Convert.ToUInt16(this);
}
private new virtual sealed int IConvertible.ToInt32(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call int32 System.Convert::ToInt32(bool)
//IL_0007: ret
return Convert.ToInt32(this);
}
private new virtual sealed uint IConvertible.ToUInt32(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call uint32 System.Convert::ToUInt32(bool)
//IL_0007: ret
return Convert.ToUInt32(this);
}
private new virtual sealed long IConvertible.ToInt64(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call int64 System.Convert::ToInt64(bool)
//IL_0007: ret
return Convert.ToInt64(this);
}
private new virtual sealed ulong IConvertible.ToUInt64(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call uint64 System.Convert::ToUInt64(bool)
//IL_0007: ret
return Convert.ToUInt64(this);
}
private new virtual sealed float IConvertible.ToSingle(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call float32 System.Convert::ToSingle(bool)
//IL_0007: ret
return Convert.ToSingle(this);
}
private new virtual sealed double IConvertible.ToDouble(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call float64 System.Convert::ToDouble(bool)
//IL_0007: ret
return Convert.ToDouble(this);
}
private new virtual sealed decimal IConvertible.ToDecimal(System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: call valuetype System.Decimal System.Convert::ToDecimal(bool)
//IL_0007: ret
return Convert.ToDecimal(this);
}
private new virtual sealed DateTime IConvertible.ToDateTime(System.IFormatProvider provider)
{
//.maxstack 5
//.locals init (object[] V_0)
//IL_0000: call class System.Globalization.CultureInfo System.Globalization.CultureInfo::get_CurrentCulture()
//IL_0005: ldstr "InvalidCast_FromTo"
//IL_000a: call string System.Environment::GetResourceString(string)
//IL_000f: ldc.i4.2
//IL_0010: newarr System.Object
//IL_0015: stloc.0
//IL_0016: ldloc.0
//IL_0017: ldc.i4.0
//IL_0018: ldstr "Boolean"
//IL_001d: stelem.ref
//IL_001e: ldloc.0
//IL_001f: ldc.i4.1
//IL_0020: ldstr "DateTime"
//IL_0025: stelem.ref
//IL_0026: ldloc.0
//IL_0027: call string System.String::Format(class System.IFormatProvider,
// string,
// object[])
//IL_002c: newobj instance void System.InvalidCastException::.ctor(string)
//IL_0031: throw
object[] V_0;
V_0 = new object[2];
V_0[0] = "Boolean";
V_0[1] = "DateTime";
throw new InvalidCastException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("InvalidCast_FromTo"), V_0));
}
private new virtual sealed object IConvertible.ToType(System.Type @type, System.IFormatProvider provider)
{
//.maxstack 8
//IL_0000: ldarg.0
//IL_0001: ldind.i1
//IL_0002: box System.Boolean
//IL_0007: ldarg.1
//IL_0008: ldarg.2
//IL_0009: call object System.Convert::DefaultToType(class System.IConvertible,
// class System.Type,
// class System.IFormatProvider)
//IL_000e: ret
return Convert.DefaultToType((IConvertible)this, @type, provider);
}
private static Boolean()
{
//.maxstack 8
//IL_0000: ldstr "True"
//IL_0005: stsfld string System.Boolean::TrueString
//IL_000a: ldstr "False"
//IL_000f: stsfld string System.Boolean::FalseString
//IL_0014: ret
Boolean.TrueString = "True";
Boolean.FalseString = "False";
}
}
}