Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IEnumerable<;T>;到CSV。。。在数组处理中_C#_Csv - Fatal编程技术网

C# IEnumerable<;T>;到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)

我有一个“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).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