2013-01-18 174 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+"\\"));