我如何在每个项目usinq linq上附加到stringbuilder

leo*_*ora 2 c# linq collections

我有一个stringbuilder

Stringbuilder b = new StringBuilder();
Run Code Online (Sandbox Code Playgroud)

我想采用一个集合,并使用LINQ从集合中的每个项目追加一个属性名称.这可能吗.

这样的事情:

myCollection.Select(r=> b.Append(r.PropertyName);
Run Code Online (Sandbox Code Playgroud)

(但这似乎不起作用)

Bro*_*ass 7

这会起作用(即使它是一种非常圆润的做事方式)并且可以在任何方面工作IEnumerable<string>:

List<string> foo = new List<string>();
foo.Add("bar");
foo.Add("baz");
StringBuilder result = foo.Aggregate(new StringBuilder(), (a, b) => a.Append(b)); 
Run Code Online (Sandbox Code Playgroud)

适应你的例子:

StringBuilder result = myCollection.Aggregate(new StringBuilder(), (a, b) => a.Append(b.PropertyName)); 
Run Code Online (Sandbox Code Playgroud)


Ant*_*ram 5

当一个简单的foreach语句足够富有表现力和简洁时,你不需要在这里强制使用LINQ.但是,如果你想使用更多功能性的方法,你总是可以选择一些string.Join我认为在StringBuilder内部使用的东西(但不要引用它).如

builder.Append(string.Join("", myCollection.Select(r => r.PropertyName)));
Run Code Online (Sandbox Code Playgroud)

但实际上,在你可能看到的所有例子中,它们都会比它们更简洁(或更具可读性)

foreach (var item in myCollection) 
     builder.Append(item.PropertyName);
Run Code Online (Sandbox Code Playgroud)