public new byte[] ToBytes()
        {

            if (IBDATACollection == null || IBDATACollection.Count == 0)
            {
                base.MessageHeaderLastFlag = true;
                return base.ToBytes();
            }
            else
            {
                base.MessageHeaderLastFlag = false;
                byte[] regularBytes = base.ToBytes();
                int index = 0;
                
                int ibdataLength = (from ibdata in IBDATACollection
                                   where ibdata != null && ibdata.TOTAL_WIDTH > 0
                                    select ibdata.TOTAL_WIDTH).Sum() + IBDATACollection.Count * (CoreDataBlockHeader.TOTAL_WIDTH + CoreMessageHeader.TOTAL_WIDTH);
                byte [] result = new byte[ibdataLength + regularBytes.Length];
                Array.Copy(regularBytes, result, regularBytes.Length);
                int offset = regularBytes.Length;
                foreach (var ibdata in IBDATACollection)
                {
                    CoreMessageHeader msgHeader = new CoreMessageHeader();
                    msgHeader.MH_MESSAGE_LENGTH = (uint)(CoreMessageHeader.TOTAL_WIDTH + CoreDataBlockHeader.TOTAL_WIDTH + ibdata.TOTAL_WIDTH);
                    msgHeader.MH_LAST_FLAG = (++index == IBDATACollection.Count) ? true : false;
                    Array.Copy(msgHeader.ToBytes(), 0, result, offset,  CoreMessageHeader.TOTAL_WIDTH);
                    offset += CoreMessageHeader.TOTAL_WIDTH;
                    
                    CoreDataBlockHeader dbhdr = new CoreDataBlockHeader();
                    dbhdr.DBH_DB_LENGTH = (uint)(CoreDataBlockHeader.TOTAL_WIDTH + ibdata.TOTAL_WIDTH);
                    dbhdr.DBH_DB_ID = "@IBDATA";
                    Array.Copy(dbhdr.ToBytes(), 0, result, offset, CoreDataBlockHeader.TOTAL_WIDTH);
                    offset += CoreDataBlockHeader.TOTAL_WIDTH;
                    Array.Copy(ibdata.ToBytes(), 0, result, offset, ibdata.TOTAL_WIDTH);
                    offset += ibdata.TOTAL_WIDTH;
                }

                return result;                
            }
        }
        public byte[] ToBytes()
        {
            //统一编码消息头 MH

            CoreMessageHeader msgHeader = new CoreMessageHeader();
            msgHeader.MH_MESSAGE_LENGTH = CoreMessageHeader.TOTAL_WIDTH + RQ_TOTAL_WIDTH;
            msgHeader.MH_LAST_FLAG = MessageHeaderLastFlag;
            byte[] buffer = new byte[msgHeader.MH_MESSAGE_LENGTH];
            Array.Copy(msgHeader.ToBytes(), buffer, CoreMessageHeader.TOTAL_WIDTH);

            byte[] rqtotal = new byte[RQ_TOTAL_WIDTH];
            CoreDataBlockHeader dbhdr1 = new CoreDataBlockHeader();
            dbhdr1.DBH_DB_LENGTH = CoreDataBlockHeader.TOTAL_WIDTH + RQHDR_MsgHandler.TOTAL_WIDTH;
            dbhdr1.DBH_DB_ID = "@RQHDR";
            Array.Copy(dbhdr1.ToBytes(), rqtotal, CoreDataBlockHeader.TOTAL_WIDTH);
            Array.Copy(RQhdrHandler.ToBytes(), 0, rqtotal, CoreDataBlockHeader.TOTAL_WIDTH, RQHDR_MsgHandler.TOTAL_WIDTH);

            if (GetRQDTLLen() > 0)
            {
                CoreDataBlockHeader dbhdr2 = new CoreDataBlockHeader();
                dbhdr2.DBH_DB_LENGTH = (UInt32)(CoreDataBlockHeader.TOTAL_WIDTH + GetRQDTLLen());
                dbhdr2.DBH_DB_ID = "@RQDTL";
                Array.Copy(dbhdr2.ToBytes(), 0, rqtotal, CoreDataBlockHeader.TOTAL_WIDTH + RQHDR_MsgHandler.TOTAL_WIDTH, CoreDataBlockHeader.TOTAL_WIDTH);
                rqtotal = RQDTL_ToBytes(rqtotal);
            }
            Array.Copy(rqtotal, 0, buffer, CoreMessageHeader.TOTAL_WIDTH, RQ_TOTAL_WIDTH);
            return buffer;
        }