static MarshalType() { IsIntPtr = typeof(T) == typeof(IntPtr); RealType = typeof(T); if (RealType.IsEnum) { RealType = RealType.GetEnumUnderlyingType(); } TypeCode = Type.GetTypeCode(RealType); Size = TypeCode == TypeCode.Boolean ? 1 : Marshal.SizeOf(RealType); CanBeStoredInRegisters = IsIntPtr || TypeCode == TypeCode.Boolean || TypeCode == TypeCode.Byte || TypeCode == TypeCode.Char || TypeCode == TypeCode.Int16 || TypeCode == TypeCode.Int32 || TypeCode == TypeCode.Int64 || TypeCode == TypeCode.Single || TypeCode == TypeCode.UInt16 || TypeCode == TypeCode.UInt32 || TypeCode == TypeCode.UInt64 || TypeCode == TypeCode.SByte; }