C# IEnumerable<;T>;到CSV。。。在数组处理中
我有一个“IEnumerable to CSV”扩展类 我的源代码C# IEnumerable<;T>;到CSV。。。在数组处理中,c#,csv,C#,Csv,我有一个“IEnumerable to CSV”扩展类 我的源代码 public static class CSVConverter { public static string ToCsv<T>(this IEnumerable<T> items) where T : class { var csvBuilder = new StringBuilder(); var properties = typeof(T)
public static class CSVConverter
{
public static string ToCsv<T>(this IEnumerable<T> items) where T : class
{
var csvBuilder = new StringBuilder();
var properties = typeof(T).GetProperties();
csvBuilder.AppendLine(String.Join(",", properties.Select(p => p.Name.ToCsvValue()).ToArray()));
foreach (T item in items)
{
string line = String.Join(",", properties.Select(p => p.GetValue(item, null).ToCsvValue()).ToArray()); csvBuilder.AppendLine(line);
}
return csvBuilder.ToString();
}
private static string ToCsvValue<T>(this T item) where T : class
{
if (item == null) { return ""; }
if (item is string)
{
return String.Format("\"{0}\"", item.ToString().Replace("\"", "\""));
}
double dummy;
if (double.TryParse(item.ToString(), out dummy))
{
return String.Format("{0}", item);
}
return String.Format("\"{0}\"", item);
}
}
公共静态类CSV转换器
{
公共静态字符串ToCsv(此IEnumerable items),其中T:class
{
var csvBuilder=新的StringBuilder();
var properties=typeof(T).GetProperties();
csvBuilder.AppendLine(String.Join(“,”,properties.Select(p=>p.Name.ToCsvValue()).ToArray());
foreach(项目中的T项目)
{
string line=string.Join(“,”,properties.Select(p=>p.GetValue(item,null).ToCsvValue()).ToArray();csvBuilder.AppendLine(line);
}
返回csvBuilder.ToString();
}
私有静态字符串ToCsvValue(此T项),其中T:class
{
如果(item==null){return”“;}
if(项为字符串)
{
返回String.Format(“\”{0}\”,item.ToString().Replace(“\”,“\”);
}
双假人;
if(double.TryParse(item.ToString(),out dummy))
{
返回String.Format(“{0}”,item);
}
返回String.Format(“\{0}\”,item);
}
}
包括未经处理的数据转换数组项
示例代码
public class Person
{
public string Name { get; set; }
public string[] NickName { get; set; }
}
public void ConvertTest()
{
string csvData = new List<Person> {
new Person
{
Name = "Harold",
NickName = new string[] { "Bruce Lee", "Jackie Chan" }
}
}.ToCsv();
}
公共类人物
{
公共字符串名称{get;set;}
公共字符串[]昵称{get;set;}
}
公共测试()
{
字符串csvData=新列表{
新人
{
Name=“Harold”,
昵称=新字符串[]{“李小龙”、“成龙”}
}
}.ToCsv();
}
csvData是“\”名称“,\”昵称“\r\n\”哈罗德“,\”系统字符串[]\”\r\n
无法处理数组项结果的ConvertTest()
所以我想成为
“System.String[]”-->“李小龙,成龙”
我该怎么做?我不知道您需要什么格式,但maybee这将提供一些想法
public static class CSVConverter
{
public static string ToCsv<T>(this IEnumerable<T> items) where T : class
{
var csvBuilder = new StringBuilder();
var properties = typeof(T).GetProperties();
if (properties.Count() == 0)
{
csvBuilder.AppendLine(String.Join(",", items));
}
else
{
csvBuilder.AppendLine(String.Join(",", properties.Select(p => p.Name.ToCsvValue()).ToArray()));
foreach (T item in items)
{
string line = String.Join(",", properties.Select(p => p.GetValue(item, null).ToCsvValue()).ToArray());
csvBuilder.AppendLine(line);
}
}
return csvBuilder.ToString();
}
private static string ToCsvValue<T>(this T item) where T : class
{
if (item == null) { return ""; }
if (item is string)
{
return String.Format("\"{0}\"", item.ToString().Replace("\"", "\""));
}
if (item.GetType().IsArray)
{
return item.ToString() + "\"" + ((IEnumerable<T>)item).ToCsv() + "\"";
}
double dummy;
if (double.TryParse(item.ToString(), out dummy))
{
return String.Format("{0}", item);
}
return String.Format("\"{0}\"", item);
}
}
公共静态类CSV转换器
{
公共静态字符串ToCsv(此IEnumerable items),其中T:class
{
var csvBuilder=新的StringBuilder();
var properties=typeof(T).GetProperties();
if(properties.Count()==0)
{
AppendLine(String.Join(“,”,items));
}
其他的
{
csvBuilder.AppendLine(String.Join(“,”,properties.Select(p=>p.Name.ToCsvValue()).ToArray());
foreach(项目中的T项目)
{
string line=string.Join(“,”,properties.Select(p=>p.GetValue(item,null).ToCsvValue()).ToArray());
csvBuilder.AppendLine(行);
}
}
返回csvBuilder.ToString();
}
私有静态字符串ToCsvValue(此T项),其中T:class
{
如果(item==null){return”“;}
if(项为字符串)
{
返回String.Format(“\”{0}\”,item.ToString().Replace(“\”,“\”);
}
if(item.GetType().IsArray)
{
返回item.ToString()+“\”+((IEnumerable)item.ToCsv()+“\”;
}
双假人;
if(double.TryParse(item.ToString(),out dummy))
{
返回String.Format(“{0}”,item);
}
返回String.Format(“\{0}\”,item);
}
}
我添加了一个if(item.GetType().IsArray)
来检查它是否是数组,然后迭代这些项。自我回答
if (item is string[])
{
IEnumerable<string> list = item as IEnumerable<string>;
return String.Format("\"{0}\"", String.Join(",", list).Replace("\"", "\""));
}
if(项为字符串[])
{
IEnumerable list=项作为IEnumerable;
返回String.Format(“\”{0}\”,String.Join(“,”,list)。替换(“\”,“\”);
}
添加到-string ToCsvValue(此T项),其中T:class