Concatenare le stringhe con LINQ To Objects

Rate this Content 0 Votes

Autore: Matteo Baglini

Grazie al metodo Aggregate fornito da Linq To Objects possiamo effettuare la concatenazione di stringhe con una sintassi completamente dichiarativa.

private static void DemoAggregate()
{
    var words = new[] { "one", "two", "three" };
    var res = words.Aggregate((current, next) => current + ", "+ next);
    Console.WriteLine(res);
}

Questo codice, dato che utilizza l'operatore "+" per effettuare la concatenazione, non è scalabile e soffre di gravi prpblemi di performance se utilizzato con un elevato numero di stringhe. In scenari del genere è fortemente consigliato l'uso della classe StringBuilder. A questo punto la domanda sorge spontanea, possiamo sfruttare l'espressività di Aggregate e la potenza di StringBuilder? Ma certo!!

private static void DemoAggregateStringBuilder()
{
    var words = new[] { "one", "two", "three" };
    var res = words.Aggregate(new StringBuilder(), (sb, next) => sb.Append(sb.Length > 0 ? ", " + next : next)).ToString();
    Console.WriteLine(res);
}