2013-01-18 259 views
4

的名單上有對象的列表分隔字符串一個標籤叫的人,我想從列表中創建一個製表符分隔字符串創建從對象

例子:

public class Person 
{ 
    public string FirstName { get; set; } 
    public int Age { get; set; } 
    public string Phone { get; set; } 
} 



List<Person> persons = new List<Persons>(); 

persons.add (new person {"bob",15,"999-999-0000"}) 
persons.add (new person {"sue",25,"999-999-0000"}) 
persons.add (new person {"larry",75,"999-999-0000"}) 

我想輸出列出爲一個字符串,是這樣的:

"bob\t15\t999-999-0000\r\nsue\t25\999-999-0000\r\nlarry\t75\999-999-0000\r\n" 

現在我只是在列表中要循環,做一行一行的舊時尚的方式..我想知道,如果是一個短切入LINQ。

+0

我認爲更好的辦法是重寫你的個人ToString方法,然後使用的string.join(「\ r」,list.Select(人= > person.ToString())。ToArray())... – acrilige

回答

4

可以使用Strig.Join

string str = string.Join(Environment.NewLine, person.Select(r=> r.FirstName [email protected]"\t" + 
            r.Age + @"\t" + 
            r.Phone")) 
+0

除了「\ r」不是窗口上新行的最好的一個 –

+0

@ViacheslavSmityukh,是的,我認爲最好使用'Environment.NewLine' – Habib

5

總結格式化字符串人與StringBuilder。因此,你會在內存中避免創建大量的字符串:

var result = persons.Aggregate(
    new StringBuilder(), 
    (sb, p) => sb.AppendFormat("{0}\t{1}\t{2}\r\n", p.FirstName, p.Age, p.Phone), 
    sb => sb.ToString()); 
0
persons.ForEach(q => output+=(q.firstname+"\\"+q.Age.ToString()+"\\"+q.Phone+"\\"));