0
Promoção de Volta das Aulas ! Cursos com 25% OFF no menu "Cursos"
outubro 9, 2025
0
César Fontanella

C# para Iniciantes: Fundamentos do .NET que todo dev precisa (strings, datas/horas, números, globalização, igualdade e utilitários)

Palavra-chave foco: fundamentos do .NET para iniciantes (strings, datas, números, globalização, igualdade)

Dominar os fundamentos do .NET é o que separa quem “faz funcionar” de quem entende o runtime e escreve código confiável. Neste guia prático você verá os blocos essenciais: strings/encodings, datas e horas, números, globalização, igualdade/ordenação e utilitários como Console, Environment e Process.


1) Strings & Encodings (UTF-8 por padrão)

  • Por que importa: evitar caracteres “quebrados” e bugs de acentuação.
  • Práticas:
    • Prefira UTF-8 em leitura/escrita de arquivos e HTTP.
    • Use interpolação e formatação com cultura quando exibir números/moeda.
var bytes = System.Text.Encoding.UTF8.GetBytes("Olá, .NET!");
var texto = System.Text.Encoding.UTF8.GetString(bytes);
Console.WriteLine(texto);

Dicas: StringComparison.Ordinal para buscas rápidas; InvariantCulture para persistência.


2) Datas e Horas (sem fuso ~ sem dor)

  • Por que importa: fuso horário e horário de verão derrubam sistemas.
  • Tipos chave:
    • DateTime (local/UTC/unspecified) — use UTC para armazenamento.
    • DateOnly / TimeOnly — quando só data ou só hora importam.
    • TimeZoneInfo — conversões corretas de fuso.
var agoraUtc = DateTime.UtcNow;
var sp = TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time");
var horaSp = TimeZoneInfo.ConvertTimeFromUtc(agoraUtc, sp);
Console.WriteLine(horaSp);

Dicas: sempre normalize para UTC no banco; converta para local apenas na borda (UI/API).


3) Números e formatação (de int a BigInteger)

  • Por que importa: precisão, desempenho e legibilidade.
  • Pontos principais:
    • Escolha o tipo certo: int, long, decimal (dinheiro), double/float (científico), BigInteger (valores enormes).
    • Formatação consciente de cultura:
decimal preco = 1234.56m;
var br = new System.Globalization.CultureInfo("pt-BR");
Console.WriteLine(preco.ToString("C", br)); // R$ 1.234,56

Dica: para cálculos monetários, use decimal; evite double por erros de ponto flutuante.


4) Globalização & Cultura (i18n de verdade)

  • Por que importa: apps que funcionam fora do seu microambiente.
  • Boas práticas:
    • Nunca formate para persistir (JSON/DB) com cultura local → use InvariantCulture.
    • Ao exibir para humanos, use a CultureInfo do usuário.
var inv = System.Globalization.CultureInfo.InvariantCulture;
double x = 3.14159;
var persistir = x.ToString(inv); // "3.14159"

Dica: para comparação/ordenação de strings “por idioma”, use CompareInfo/CompareOptions.


5) Igualdade & Ordenação (contratos claros)

  • Por que importa: coleções corretas, buscas rápidas e menos bugs.
  • Ferramentas:
    • Implemente IEquatable<T> e sobrescreva Equals/GetHashCode em tipos de valor lógico.
    • Para ordenar, IComparable<T> ou IComparer<T>.
public readonly record struct ProdutoId(Guid Value) : IEquatable<ProdutoId>
{
    public bool Equals(ProdutoId other) => Value.Equals(other.Value);
    public override int GetHashCode() => Value.GetHashCode();
}

Dicas: em records, igualdade por valor já vem pronta; em classes tradicionais, é por referência (a menos que você sobrescreva).


6) Utilitários essenciais do runtime

  • Console: I/O simples, cores, redirecionamento.
  • Environment: variáveis, separadores, caminho, Environment.Version.
  • Process: iniciar/monitorar processos externos com segurança.
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Hello, .NET!");
Console.ResetColor();

Console.WriteLine(Environment.OSVersion);
Console.WriteLine(Environment.ProcessorCount);

using var proc = new System.Diagnostics.Process
{
    StartInfo = new System.Diagnostics.ProcessStartInfo
    {
        FileName = "dotnet",
        Arguments = "--info",
        RedirectStandardOutput = true
    }
};
proc.Start();
Console.WriteLine(proc.StandardOutput.ReadToEnd());

Dicas: ao chamar processos, redirecione saída e valide entradas para evitar injeção de comandos.


Checklist rápido (copie e cole no seu projeto)

  • Persistir datas em UTC; exibir em cultura do usuário.
  • Formatar números/moedas com a CultureInfo correta.
  • Usar UTF-8 em arquivos/HTTP e StringComparison.Ordinal para comparações internas.
  • Definir igualdade/ordenação nos seus tipos de domínio.
  • Evitar double para finanças; preferir decimal.
  • Persistência com InvariantCulture; UI com cultura do usuário.

FAQ (para SEO)

DateOnly/TimeOnly substituem DateTime?
Não. Eles complementam quando você não precisa de fuso/UTC (ex.: aniversário ou horário de abertura).

Por que minha moeda sai com ponto em vez de vírgula?
Você está usando a cultura errada. Para exibir em PT-BR, forneça new CultureInfo("pt-BR") ao formatar.

É obrigatório implementar IEquatable<T>?
Não, mas melhora performance e coerência em coleções e dicionários com tipos de domínio.


Post baseado no Capítulo 6 — “.NET Fundamentals” do livro C# 12 in a Nutshell, de Joseph Albahari (O’Reilly).