我無法獲取回圈中的最后一項寫入 CSV,我不希望 CSV 中的最后一項在,
末尾有一個。
這是將我的控制器寫入 CSV 的公共字串
public string WriteTsv<T>(IEnumerable<T> data)
{
StringBuilder output = new StringBuilder();
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
foreach (PropertyDescriptor prop in props)
{
output.Append(prop.DisplayName); // header
output.Append(", \t");
}
output.AppendLine();
foreach (T item in data)
{
foreach (PropertyDescriptor prop in props)
{
output.Append(prop.Converter.ConvertToString(
prop.GetValue(item)));
output.Append(", \t");
}
output.AppendLine();
}
return output.ToString();
}
我已經堅持了一段時間了,希望有人能提供幫助。
uj5u.com熱心網友回復:
給定您的代碼,最簡單的方法是", \t"
在每次呼叫之前洗掉最后 3 個字符(final),以使用StringBuilder.Length屬性是可寫AppendLine()
的事實。
所以,不僅僅是
output.AppendLine();
做
output.Length -=3;
output.AppendLine();
從它說的同一檔案中,
如果指定長度小于當前長度,則將當前StringBuilder物件截斷為指定長度。
當然,如果您認為可能存在長度小于 3 的字串,您將需要進行一些錯誤檢查。您可能還需要注意字串值實際上以, \t
...結尾的屬性。
uj5u.com熱心網友回復:
您可以使用String.Join
將 aIEnumerable<T>
與分隔符組合,然后使用AppendLine
添加到output
. 我曾經Cast<T>()
將IEnumerable
實作從傳統PropertyDescriptorCollection
轉換為現代IEnumerable<T>
. (不幸的是,很多 C# 尚未更新以正確支持IEnumerable<T>
.)
public string WriteTsv<T>(IEnumerable<T> data) {
var output = new StringBuilder();
var props = TypeDescriptor.GetProperties(typeof(T)).Cast<PropertyDescriptor>();
// header
output.AppendLine(String.Join(",", props.Select(prop => prop.DisplayName)));
// data
foreach (T item in data)
output.AppendLine(String.Join(",", props.Select(prop => prop.Converter.ConvertToString(prop.GetValue(item)))));
return output.ToString();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479370.html
標籤:C# CSV asp.net-web-api 导出到 csv csvhelper