我发现的例子似乎都是针对单个项目列表,我的有多个项目.
我目前的代码是;
private static string CreateCSVTextfile<T>(List<T> data,string seperator = ",") where T : ExcelReport,new(){ var objectType = typeof(T); var propertIEs = objectType.GetPropertIEs(); var currentRow = 0; var returnString = ""; foreach (var row in data) { var currentColumn = 0; var linestring = ""; foreach (var info in propertIEs) { linestring = linestring + info.GetValue(row,null) + seperator; currentColumn++; } if (seperator != "") { linestring = linestring.Substring(0,linestring.Count() - 2); } returnString = returnString + Environment.Newline + linestring; currentRow++; } return returnString;}
但是当列表很大时,此方法需要很长时间才能运行.
我的列表基于外观;
internal class ClIEntMasterfile{public String Col1{ get; set; }public String Col2{ get; set; }public String Col3{ get; set; }public String Col4{ get; set; }public String Col5{ get; set; }public String Col6{ get; set; }public String Col7{ get; set; }public String Col8{ get; set; }public String Col9{ get; set; }public String Col10{ get; set; }public String Col11{ get; set; }public String Col12{ get; set; }}
使用高级版本的String.Join有更快的方法吗?
谢谢
解决方法 使用StringBuilder
和 string.Join
可以简化您的方法. 直接连接字符串很慢并且使用大量内存,这对于小型 *** 作来说很好.
见:Does StringBuilder use more memory than String concatenation?
private static string CreateCSVTextfile<T>(List<T> data,"){ var propertIEs = typeof(T).GetPropertIEs(); var result = new StringBuilder(); foreach (var row in data) { var values = propertIEs.Select(p => p.GetValue(row,null)); var line = string.Join(seperator,values); result.Appendline(line); } return result.ToString();}
CSV的更完整实现:
private static string CreateCSVTextfile<T>(List<T> data){ var propertIEs = typeof(T).GetPropertIEs(); var result = new StringBuilder(); foreach (var row in data) { var values = propertIEs.Select(p => p.GetValue(row,null)) .Select(v => StringToCSVCell(Convert.ToString(v))); var line = string.Join(",",values); result.Appendline(line); } return result.ToString();}private static string StringToCSVCell(string str){ bool mustQuote = (str.Contains(",") || str.Contains("\"") || str.Contains("\r") || str.Contains("\n")); if (mustQuote) { StringBuilder sb = new StringBuilder(); sb.Append("\""); foreach (char nextChar in str) { sb.Append(nextChar); if (nextChar == '"') sb.Append("\""); } sb.Append("\""); return sb.ToString(); } return str;}
使用:escaping tricky string to CSV format
总结以上是内存溢出为你收集整理的c# – CSV字符串的通用列表全部内容,希望文章能够帮你解决c# – CSV字符串的通用列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)