Strings Multilinha em C#: de Hacks ao C# 11 — Guia Completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Um dia no Stack Overflow: A Maldição das Strings Longas em C#



Imagine a situação. Você está escrevendo em C# um JSON de configuração, uma consulta SQL ou, digamos, um template HTML diretamente no código. A string fica longa, feia e absolutamente ilegível. Você pressiona Enter para quebrar a linha... e recebe um erro de compilação. Familiar?



A pergunta "Multiline string literal in C#" no Stack Overflow acumulou dezenas de milhares de visualizações. E isso não é por acaso. Por muito tempo, C# não foi a linguagem mais amigável para trabalhar com texto multilinha. Mas os tempos estão mudando. Neste artigo, percorreremos o caminho desde soluções improvisadas até as soluções elegantes que surgiram no C# 11.



Se você programa em C# e trabalha com literais de string multilinha, este material economizará horas de pesquisa no Google. Vamos lá!



O Problema: Por que simplesmente pressionar Enter é uma má ideia?



Em C# (assim como em C++), um literal de string é uma sequência de caracteres delimitada por aspas. Uma quebra de linha dentro dessas aspas é um erro de sintaxe. O compilador simplesmente não entenderá onde a string termina.



Veja como NÃO fazer:



// Erro de compilação!string query = "SELECT * FROM UsersWHERE Age > 18ORDER BY Name";


O compilador verá "SELECT * FROM Users — e só. O resto é confusão. Antigamente, os desenvolvedores se viravam como podiam. Vamos analisar a evolução das soluções.



O Método Antigo: Verbatim string (@-string) — a salvação



A primeira coisa que vem à mente é o verbatim string literal. Basta colocar @ antes da aspa de abertura. Isso desativa a interpretação de sequências de escape (exceto aspas duplas "").



Mas há um detalhe: os recuos também se tornam parte da string.



Exemplo com verbatim string:



string json = @"{    ""name"": ""Alice"",    ""age"": 30}";Console.WriteLine(json);


Saída:

{    "name": "Alice",    "age": 30}


Vantagens:

  • Funciona em todas as versões do C#.
  • Não é necessário escapar a barra invertida (\\).

Desvantagens:

  • Aspas internas precisam ser duplicadas ("") — isso é terrível se houver muito JSON.
  • Recuos à esquerda (espaços/tabulações) entram na string final.
  • Não pode ser misturado diretamente com interpolação de strings ($) (mas pode $@).


Este método ainda é popular, mas para código limpo não é ideal. O verdadeiro avanço aconteceu no C# 11.



O Método Mais Recente: Raw string literal (C# 11 e .NET 7+)



A partir do C# 11, temos o raw string literal — literalmente "literal de string bruto". Ele resolve 99% dos problemas de multilinha.



Sintaxe: três ou mais aspas duplas consecutivas (""").



Exemplo 1: JSON simples sem escape



string json = """    {        "name": "Alice",        "age": 30    }    """;Console.WriteLine(json);


Saída:

{    "name": "Alice",    "age": 30}


Mágica: Aspas dentro da string não precisam ser duplicadas! O compilador entende que a string terminou apenas quando vê três aspas consecutivas.



Exemplo 2: Consulta SQL com recuos



string query = """    SELECT         u.Name,        o.OrderDate    FROM Users u    JOIN Orders o ON u.Id = o.UserId    WHERE o.Status = 'Active'    ORDER BY o.OrderDate DESC    """;Console.WriteLine(query);


Importante sobre recuos: As aspas de fechamento (""") definem o nível base de recuo. Todas as linhas que tiverem recuo menor que as aspas de fechamento serão cortadas. Isso permite manter a legibilidade do código sem poluir a string com espaços extras.

Blogs

Book Recommendations