Skip to main content

String | C#

  • String | C#
danger

string no C# são imutáveis e a cada alteração ele retorna um novo objeto o que aloca mais memória

O que é uma String em C#

  • Em C#, string é um tipo por referência que representa texto (sequência de caracteres char em UTF-16).
  • Isso pode gerar consumo excessivo de memória em operações repetitivas. Nesses casos, prefira StringBuilder.
string a = "Olá";
string b = a; // aponta para a mesma referência
a += " Mundo"; // cria uma NOVA string
Console.WriteLine(b); // "Olá"

Criação de Strings

string literal = "Texto simples";
string comEscape = "Linha 1\nLinha 2";
string verbatim = @"C:\Users\Nome\Arquivo.txt"; // ignora caracteres de escape
string interpolada = $"Hoje é {DateTime.Now:dd/MM/yyyy}";

Concatenação e Interpolação

  • Concatenação com +: simples, mas cria novas instâncias.
  • string.Concat / string.Join: mais performáticos.
  • Interpolação ($"..."): legível e eficiente.
string nome = "João";
int idade = 25;
string frase = $"Meu nome é {nome} e tenho {idade} anos.";

Formatação de Strings

Usando string.Format

object[] valores = { "João", 25, "Brasil" };
string msg = string.Format("Meu nome é {0}, tenho {1} anos e sou do {2}.", valores);
danger

Cuidado, precisa estar com 0, 1 para ser trocado pelo valor

Usando .Replace (menos eficiente)

string msg = "Meu nome é {nome}, tenho {idade} anos e sou do {pais}.";
msg = msg.Replace("{nome}", "João")
.Replace("{idade}", "25")
.Replace("{pais}", "Brasil");

Comparação de Strings

.CompareTo

  • Usa cultura atual (CultureInfo.CurrentCulture).
  • null vem antes de qualquer string.
  • Retorna 0 se igual, menor que 0 se menor, maior que 0 se maior.
int result = "a".CompareTo("b"); // < 0

.Equals

  • Comparação direta.
  • Pode usar StringComparison para controlar regras de cultura e case-insensitive.
  • Se chamado em null, lança exceção.
string a = "Olá";
bool igual = a.Equals("olá", StringComparison.OrdinalIgnoreCase);

== Operador

  • Internamente chama string.Equals(a, b).
  • Seguro contra null.
string a = null;
bool teste = a == "teste"; // false, sem erro

Tabela Comparativa

MétodoNull-safeCultura/CaseUso recomendado
CompareToSimCultura atualOrdenação
.EqualsNãoConfigurávelComparações explícitas
== operadorSimOrdinalComparações simples

Principais Métodos de String

  • .Length
  • .Substring(início, tamanho)
  • .Contains, .StartsWith, .EndsWith
  • .ToUpper(), .ToLower(), .Trim()
  • .PadLeft(), .PadRight()
  • .IndexOf, .LastIndexOf
  • .Split(...)
  • string.Join(...)
string texto = " C# Strings ";
Console.WriteLine(texto.Trim().ToUpper()); // "C# STRINGS"

StringBuilder

Use quando precisar modificar strings muitas vezes em loops.

using System.Text;

var sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
sb.Append(i).Append(" ");
string resultado = sb.ToString();

Strings e Performance

  • Strings em C# são UTF-16.
  • Manipulação intensa pode gerar overhead.
  • Alternativas como U8String (biblioteca externa) trazem suporte nativo a UTF-8 para cenários de alta performance (rede, IO, interop).

Exemplo com U8String:

using U8;
var texto = u8("Hello, World!");
var equals = texto == "Hello, World!"u8;

Literais Especiais

  • Verbatim (@): ignora escapes.
string path = @"C:\Users\Joao\Docs";
  • Interpolação + Verbatim
string pasta = "Docs";
string path = $@"C:\Users\Joao\{pasta}";
  • Raw string literals (C# 11+)
string json = """
{
"nome": "João",
"idade": 25
}
""";

Comparações Avançadas

  • StringComparison.Ordinal: mais rápido, case-sensitive.
  • StringComparison.OrdinalIgnoreCase: rápido, case-insensitive.
  • StringComparison.InvariantCultureIgnoreCase: útil para normalização independente de cultura.

Boas Práticas

  • Prefira interpolação a string.Format.
  • Use StringComparison para evitar ambiguidades culturais.
  • Em concatenações intensivas, use StringBuilder.
  • Para alto desempenho em UTF-8, considere U8String.
  • Evite cadeias longas de .Replace quando puder interpolar.

Conclusão

Strings em C# são poderosas, mas exigem atenção em:

  • Imutabilidade
  • Comparações (==, .Equals, .CompareTo)
  • Performance (quando usar StringBuilder ou U8String)
  • Literais especiais para maior clareza