C# - 6 maneiras de concatenar strings


 Neste artigo vou mostrar 6 formas diferentes de concatenar strings na linguagem C# e considerar qual o mais indicado.

Antes de entrar na parte prática vamos recordar os conceitos sobre Strings na linguagem C#.

O tipo System.String (apenas string em C#) é um dos tipos mais importantes na plataforma .NET, sendo um dos tipos mais usados e mais mal interpretado.

String ou string ?  (Acesso do original : https://pt.stackoverflow.com/questions/3711/qual-%C3%A9-a-diferen%C3%A7a-de-string-vs-string)

string é apenas um alias para o tipo String.

Não há diferença em desempenho ou na forma como o código é gerado. Ambas podem fazer as mesmas coisas, e todos os membros estão disponíveis em qualquer um deles, afinal assim se comporta um alias.

Diferenças úteis na utilização e escolha entre string ou String :

  • string é apenas uma forma mais simples de usar o tipo String no C#, ou seja string é a forma de "tipar" uma cadeia de caracteres no C# e String é um tipo dp CLR. No C#, dependendo do contexto, é melhor usar uma ou outra forma. O tipo String presente no namespace System pode ser usado em qualquer linguagem que se utilize do CLR.
  • string não pode ser usada com reflexão. String deve ser usado no seu lugar.
  • String pode ser usado para criar outros aliases:
  • String pode ser usado como identificador válido. string é uma palavra reservada e não pode ser um identificador.
  • Afinal o que é uma String ?

    Uma string é basicamente uma seqüência de caracteres. Cada caractere é um caractere Unicode no intervalo U+0000 a U+FFFF.

    O tipo string tem as seguintes principais características:

    1. É um tipo de referência :  O tipo string é um tipo por valor e por causa da sua imutabilidade ela pode parecer um tipo por valor, mas não se deixe enganar, ele é um tipo de referência normal.
       
    2. É imutável -   Você nunca pode mudar o conteúdo de uma string, pelo menos com um código seguro que não usa reflexão. Por causa disso, muitas vezes você acaba alterando o valor de uma variável variável. 
      Por exemplo, o código :
       str = str.Replace ("teste", "demo");
      não altera o conteúdo da seqüência de caracteres originalmente referenciada - apenas define o valor da string, que é uma cópia da cadeia antiga, mas com "teste" substituído por "demo".
       
    3. Pode conter null - Na plataforma .NET, as strings ou cadeias de caracteres podem conter caracteres nulos sem problemas.
       
    4. Sobrecarrega o operador == Quando o operador == é usado para comparar duas seqüências de caracteres, o método Equals é chamado, que verifica a igualdade dos conteúdos das seqüências de caracteres e não as referências propriamente ditas.

    Com esses conceitos em em mente vejamos como podemos concatenar strings...

    Recursos Usados:

    1- Usando o operador +

    O operador + pode funcionar como um operador unário ou binário.

    Operadores + binários são predefinidos para tipos numéricos e para string. Para tipos numéricos, + calcula a soma de dois operandos.

    using static System.Console;
    namespace CShp_ConcatenandoStrings
    {
        class Program
        {
            static void Main(string[] args)
            {
                string s1 = "Macoratti .net " + "quase " + " tudo " + " para " + " .NET";
                WriteLine(s1);
                ReadKey();
            }
        }
    }

    Quando um ou os dois operandos forem do tipo string, + concatenará as representações de cadeia de caracteres dos operandos.

    2- Usando o método Concact

    O método Concat concatena duas instâncias especificadas de string.

    using static System.Console;
    using System.Collections.Generic;
    namespace CShp_ConcatenandoStrings
    {
        class Program
        {
            static void Main(string[] args)
            {
                IEnumerable<string> lista = new List<string>() { "Macoratti .net ", "quase ", " tudo", " para ", ".NET" };
                string s2 = string.Concat(lista);
             WriteLine(s2);
                ReadKey();
            }
        }
    }

    O método apenas concatena as strings e não inclui nenhum delimitador.

    3- Usando o método Join

    O método Join concatena todos os elementos de uma matriz de cadeia de caracteres usando o separador especificado entre cada elemento

    using static System.Console;
    namespace CShp_ConcatenandoStrings
    {
        class Program
        {
            static void Main(string[] args)
            {
                string s3 = string.Join(" ", "Macoratti .net", "quase", "tudo", "para", ".NET");
             WriteLine(s3);
                ReadKey();
            }
        }
    }

    O primeiro parâmetro é o separador que será adicionado entre os elementos de string individuais.

    4- Usando a classe StringBuilder

    A classe oferece uma forma bem flexível de concatenar strings usando o método Append.

    using static System.Console;
    using System.Text;
    namespace CShp_ConcatenandoStrings
    {
        class Program
        {
            static void Main(string[] args)
            {
                   StringBuilder sb = new StringBuilder();
                   sb.Append("Macoratti .net ").Append("quase ").Append(" tudo ").Append("para").Append(" .NET.");
                   string s4 = sb.ToString();
                   WriteLine(s4);
                   ReadKey();
            }
        }
    }

    A classe StringBuilder esta no namespace System.Text.

    5- Usando o método String.Format

    O método String.Format converte o valor de objetos em cadeias de caracteres com base em formatos de especificado e as insere em outra cadeia de caracteres.

    using static System.Console;
    namespace CShp_ConcatenandoStrings
    {
        class Program
        {
            static void Main(string[] args)
            {
               string s5 = string.Format("{0} {1} {2} {3} {4}", "Macoratti .net ", "quase ", " tudo", " para ", ".NET");
                  WriteLine(s5);
                  ReadKey();
            }
        }
    }

    Geralmente usamos esse método quando precisamos inserir o valor de um objeto, variável ou expressão em outra cadeia de caracteres.

    6- Usando o operador $ (C# 6.0)

    A partir da versão 6.0 da linguagem C# podemos reescrever o método usado no item anterior usando o operador $ na frente do código literal e do código C# entre os colchetes da seguinte forma:

    using static System.Console;
    namespace CShp_ConcatenandoStrings
    {
        class Program
        {
            static void Main(string[] args)
            {
                   string p1 = "Macoratti .net";
                   string p2 = "quase";
                   string p3 = "tudo";
                   string p4 = "para";
                   string p5 = ".NET";
                string s6 = $"{p1} {p2} {p3} {p4} {p5}";
                   WriteLine(s5);
                   ReadKey();
            }
        }
    }

    O resultado obtido será o mesmo mas o código é mais enxuto.

    Agora a pergunta que não quer calar...

    Qual o método mais eficiente para concatenar strings ?

    Bem, ai varia...

    Usar a classe StringBuilder em geral é a forma mais indicada, principalmente quando você tem muitas strings para concatenar.

    Quando você tem menos de 1000 strings para concatenar o método Concat é mais indicado. Para mais de 1000 strings use o StringBuilder.

    NotaO método Concat é ligeiramente mais rápido que o método Join.  (basedo neste site: https://www.dotnetperls.com/string-concat )

    Até o próximo artigo.

    Pegue o código do projeto aqui :   CShp_ConcatenandoStrings.zip

    "E Jesus, tendo ouvido isto, disse-lhes: Os sãos não necessitam de médico, mas, sim, os que estão doentes; eu não vim chamar os justos, mas, sim, os pecadores ao arrependimento. "
    Marcos 2:17

    Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

    Quer aprender os conceitos da Programação Orientada a objetos ?

    Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

    Referências:


    José Carlos Macoratti