c# – CSV字符串的通用列表

c# – CSV字符串的通用列表,第1张

概述我有一个列表,我想写入CSV字符串. 我发现的例子似乎都是针对单个项目列表,我的有多个项目. 我目前的代码是; private static string CreateCSVTextFile<T>(List<T> data, string seperator = ",") where T : ExcelReport, new(){ var objectType = typeof(T); 我有一个列表,我想写入CSV字符串.

我发现的例子似乎都是针对单个项目列表,我的有多个项目.

我目前的代码是;

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有更快的方法吗?

谢谢

解决方法 使用 StringBuilderstring.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字符串的通用列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存