2017-01-09 49 views
0

我正在研究一个项目,我想要一个C#对象并将其导出到CSV文件。C#将字符串转换为多个CSV轮廓列?

出口的对象,看起来像这样的伟大工程:

public class Person 
{ 
    public string Name { get; set; } 
    public string Height { get; set; } 
    public string Address { get; set; } 
    public string FavoriteColor { get; set; } 
} 

在上述情况下,CSV代码,我有出口,看起来像以下文件:

Name Height Address  FavoriteColor 
--------------------------------- 
Debacle 6 feet 123 Hope St Yellow 
Yarn 5 feet 321 Despair Blue 

但是,当我试图增加复杂性,使它回避我:

public class Person 
{ 
    public string Name { get; set; } 
    public string Height { get; set; } 
    public string Address { get; set; } 
    public string FavoriteColor { get; set; } 
    public List<string> Hobbies { get; set; } 
} 

输出如下所示:

Name Height Address  FavoriteColor Hobbies 
------------------------------------------------ 
Debacle 6 feet 123 Hope St Yellow  System.Collections.Generics.List<string> 
Yarn 5 feet 321 Despair Blue   System.Collections.Generics.List<string> 

因此,不是打印出Hobbies对象,而是打印出对象的类型和内存位置。

我试图找到一种方法把它从清单中抓住并打印出来的东西看起来更像是这样的:

Name Height Address  FavoriteColor Hobbie1 Hobbie2 Hobbie3 
---------------------------------------------------------------- 
Debacle 6 feet 123 Hope St Yellow  reading writing otherstuff 
Yarn 5 feet 321 Despair Blue   yes  no 

但是我来了空白如何动态生成这些列。 我已经将List对象更改为逗号描述的字符串,字典等,但我无法获得所需的功能。

C#中有没有一招我可能会失踪?

非常感谢您的帮助!

+0

您可以发布您用于将对象转换为CSV的导出代码吗? –

+0

你的个人课程中你的ToString方法是什么样的?你如何试图输出“爱好”列表,因为它很可能需要一个循环来输出单个项目。例如:Foreach(兴趣中的字符串hobby)。 – JohnG

+0

您没有创建一个CSV,其中**之间会有**逗号**。如果你希望这些值排成一列,那么你必须**使用空格来填充**值,以使它们对齐,或者用** TABS **分隔这些值(这可能需要额外的调整,取决于各个值的长度)。无论如何,如果你有一个'Lists '值,你可以使用如下代码快速输出:'String.Join(“,”,Hobbies.ToArray());'。 –

回答

1

你将不得不通过收集来获得个人爱好。以下是您可以添加到您的Person类以帮助输出信息的两种方法。

public string GetHobbies() { 
    StringBuilder sb = new StringBuilder(); 
    foreach (string hobbie in Hobbies) { 
    sb.Append(hobbie + " "); 
    } 
    return sb.ToString(); 
} 

public override string ToString() { 
    return Name + " " + Height + " " + Address + " " + FavoriteColor + " " + GetHobbies(); 
} 
+0

谢谢!这将附加到一个字符串(这很酷),但我不知道下一部分将业余爱好解析成单个列(在Excel中是csv)会在这里起作用。 – Debacle

+0

@Debacle要将业余爱好分成列,你可以使用'foreach'循环。每次它循环时,你都会想把这个hobbie放到不同的列中。如果它不工作,我将不得不看你的代码。 – JohnG