是否有任何简单的LINQ表达式将我的整个List
集合项连接到string
具有分隔符的单个?
如果集合是自定义对象而不是string
?想象一下,我需要连接object.Name
.
在.NET 4.0或更高版本中:
String.Join(delimiter, list);
足够了.
通过使用LINQ,这应该工作;
string delimiter = ","; Listitems = new List () { "foo", "boo", "john", "doe" }; Console.WriteLine(items.Aggregate((i, j) => i + delimiter + j));
课程描述:
public class Foo { public string Boo { get; set; } }
用法:
class Program { static void Main(string[] args) { string delimiter = ","; Listitems = new List () { new Foo { Boo = "ABC" }, new Foo { Boo = "DEF" }, new Foo { Boo = "GHI" }, new Foo { Boo = "JKL" } }; Console.WriteLine(items.Aggregate((i, j) => new Foo{Boo = (i.Boo + delimiter + j.Boo)}).Boo); Console.ReadKey(); } }
这是我最好的:)
items.Select(i => i.Boo).Aggregate((i, j) => i + delimiter + j)
这是一个字符串数组:
string.Join(delimiter, array);
这是一个List
string.Join(delimiter, list.ToArray());
这是一个自定义对象列表:
string.Join(delimiter, list.Select(i => i.Boo).ToArray());
using System.Linq; public class Person { string FirstName { get; set; } string LastName { get; set; } } Listpersons = new List (); string listOfPersons = string.Join(",", persons.Select(p => p.FirstName));
好问题.我一直在用
ListmyStrings = new List { "ours", "mine", "yours"}; string joinedString = string.Join(", ", myStrings.ToArray());
它不是LINQ,但它有效.
Liststrings = new List () { "ABC", "DEF", "GHI" }; string s = strings.Aggregate((a, b) => a + ',' + b);
我认为如果你在扩展方法中定义逻辑,代码将更具可读性:
public static class EnumerableExtensions { public static string Join(this IEnumerable self, string separator) { return String.Join(separator, self.Select(e => e.ToString()).ToArray()); } } public class Person { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return string.Format("{0} {1}", FirstName, LastName); } } // ... List people = new List (); // ... string fullNames = people.Join(", "); string lastNames = people.Select(p => p.LastName).Join(", ");