C# 11 -  Literal de strings brutas


  Hoje veremos o novo recurso do C# 11 : raw string literal ou literal de strings brutas.

Outra novidade do C#11  é a inclusão do novo recurso chamado 'raw string literal' que numa tradução livre vou chamar de literal de strings brutas.



Uma “literal string bruta” é um tipo especial de literal string que pode ser identificado por três aspas duplas no início e outras três aspas duplas no final da literal de string :


"""literal de string""";
 

Dentro dessas aspas duplas, aspas simples " são considerados conteúdo e incluídos na string. Isso significa que se uma aspa dupla estiver presente no conjunto de aspas inicial e final, ela será tratada como um caractere normal na string. Por exemplo, a string :  """ As "aspas" estão incluídas na string """ – incluirá as aspas duplas ao redor das aspas de palavras.

string str1 = """ As "aspas" estão incluídas na string """;

Console.WriteLine(str1);
 



Qualquer número de aspas duplas menor que o número que abriu o literal de string bruto é tratado como conteúdo. Isso significa que duas aspas duplas em qualquer ponto da string literal serão tratadas como conteúdo.

Exemplos de uso:

var meuJson = """
    {
       "nome" : "macoratti",
       "pais" : "Brazil"
    }
    """
;

Console.WriteLine(meuJson);
 

Podemos usar este recurso com a interpolação de strings para resolver valores de variáveis na string.

Neste caso podemos ter duas situações:

1- Usar um único caractere de interpolação $ o que significa que um único par de colchetes {} vai resolver o valor da expressão :

2- Usar dois caracteres de interpolação , neste caso o uso de colchetes duplos vai resolver o valor da expressão e considerar um único colchete duplo como um caractere :

Este outro exemplo deixa mais claro esta característica:

Existem certas regras dependendo se a string é de linha única ou de várias linhas.

Se a literal string for um literal de linha única (ou seja, começa e termina em uma única linha no código), as aspas iniciais e finais precisam ser colocadas na mesma linha.



Se a literal string tiver várias linhas (ou seja, começar em uma linha e se estender por várias linhas no código), as aspas iniciais e finais devem ser colocadas em suas próprias linhas.



Se a string literal for de várias linhas, todos os espaços em branco (caracteres de espaço ou tabulação) que aparecerem no lado esquerdo das aspas de fechamento serão removidos.

Executando o projeto teremos :

Desta forma vemos que os tipos com o modificador file podem ser acessados indiretamente fora de seu arquivo de origem não havendo conflitos de nomes.

 

Este recurso pode ser usado em aplicativos que lidam fortemente com strings muito longas, especialmente geradores de código personalizados que geram código XML/JSON/HTML.

Além disso ele melhora a legibilidade, evitando os caracteres de escape de conteúdo dentro de strings sendo uma  ótima forma de declarar JSON, XML e SQL graças ao alinhamento real.  Assim o código abaixo mostra um exemplo do uso deste recurso que torna o código mais legível :


E estamos conversados...

"Nada, em toda a criação, está oculto aos olhos de Deus. Tudo está descoberto e exposto diante dos olhos daquele a quem havemos de prestar contas."
Hebreus 4:13

Referências:


José Carlos Macoratti