private static string GenerateDataTableParser(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(string dataRowString, object userData)") .AppendLine(" {") .AppendLine(" string[] columnStrings = dataRowString.Split(DataTableExtension.DataSplitSeparators);") .AppendLine(" for (int i = 0; i < columnStrings.Length; i++)") .AppendLine(" {") .AppendLine(" columnStrings[i] = columnStrings[i].Trim(DataTableExtension.DataTrimSeparators);") .AppendLine(" }") .AppendLine() .AppendLine(" int index = 0;"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 stringBuilder.AppendLine(" index++;"); continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = int.Parse(columnStrings[index++]);"); continue; } if (dataTableProcessor.IsSystem(i)) { string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "string") { stringBuilder.AppendFormat(" {0} = columnStrings[index++];", dataTableProcessor.GetName(i)).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = {1}.Parse(columnStrings[index++]);", dataTableProcessor.GetName(i), languageKeyword).AppendLine(); } } else { stringBuilder.AppendFormat(" {0} = DataTableExtension.Parse{1}(columnStrings[index++]);", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name.Replace("[]", "Array")).AppendLine(); } } stringBuilder.AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .AppendLine(" }") .AppendLine() .AppendLine(" public override bool ParseDataRow(byte[] dataRowBytes, int startIndex, int length, object userData)") .AppendLine(" {") .AppendLine(" using (MemoryStream memoryStream = new MemoryStream(dataRowBytes, startIndex, length, false))") .AppendLine(" {") .AppendLine(" using (BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.UTF8))") .AppendLine(" {"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = binaryReader.Read7BitEncodedInt32();"); continue; } string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "int" || languageKeyword == "uint" || languageKeyword == "long" || languageKeyword == "ulong") { stringBuilder.AppendFormat(" {0} = binaryReader.Read7BitEncoded{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = binaryReader.Read{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name.Replace("[]", "Array")).AppendLine(); } } stringBuilder .AppendLine(" }") .AppendLine(" }") .AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .Append(" }"); return(stringBuilder.ToString()); }