您的方法可以使用简化StringBuilder http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx and string.Join http://msdn.microsoft.com/en-us/library/System.String.Join.aspx.
直接连接字符串速度很慢并且会占用大量内存,这对于小型操作来说是很好的。
See: StringBuilder 是否比 String 连接使用更多内存? https://stackoverflow.com/questions/4191079/does-stringbuilder-use-more-memory-than-string-concatenation
private static string CreateCSVTextFile<T>(List<T> data, string seperator = ",")
{
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;
}
Using: 将棘手的字符串转义为 CSV 格式 https://stackoverflow.com/questions/6377454/escaping-tricky-string-to-csv-format