使用LINQ将List<string>中的所有字符串连接起来

672

是否有一种简单的LINQ表达式,可以使用分隔符将我整个List<string>集合中的所有项连接成一个string

如果集合是自定义对象而不是string呢?想象一下我需要在object.Name上进行连接。


45
为什么要用 LINQ 而不是 string.Join()? - Alan
16
string.Join更好,但我认为LINQ让你的代码更有趣,这可能就是原因! - Ali Ersöz
22
String.Join更好,因为它使用了StringBuilder并避免了反复拼接带来的O(n^2)性能问题。 - Kennet Belenky
1
使用LINQ存在性能问题吗? - PreguntonCojoneroCabrón
12个回答

2

String.Join 放入扩展方法中。这是我使用的版本,比 Jordaos 版本更简洁。

  • 当列表为空时返回空字符串""。而 Aggregate 会抛出异常。
  • 可能比 Aggregate 更具优势。
  • 与其他 LINQ 方法结合使用时,比纯粹的 String.Join() 更易于阅读。

用法

var myStrings = new List<string>() { "a", "b", "c" };
var joinedStrings = myStrings.Join(",");  // "a,b,c"

Extensionmethods类

public static class ExtensionMethods
{
    public static string Join(this IEnumerable<string> texts, string separator)
    {
        return String.Join(separator, texts);
    }
}

1
你可以使用Aggregate将字符串连接成一个由特定字符分隔的单一字符串,但如果集合为空,则会抛出无效操作异常
你可以使用带有种子字符串的Aggregate函数。
var seed = string.Empty;
var seperator = ",";

var cars = new List<string>() { "Ford", "McLaren Senna", "Aston Martin Vanquish"};

var carAggregate = cars.Aggregate(seed,
                (partialPhrase, word) => $"{partialPhrase}{seperator}{word}").TrimStart(',');

你可以使用 string.Join,即使传递一个空集合也没有问题。
var seperator = ",";

var cars = new List<string>() { "Ford", "McLaren Senna", "Aston Martin Vanquish"};

var carJoin = string.Join(seperator, cars);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接