C#

Învață C# (.NET): funcții, LINQ, async/await și dotnet CLI explicate cu exemple

28 de comenzi 6 categorii

C# (pronunțat „C Sharp”) este limbajul principal al ecosistemului modern .NET (dezvoltat de Microsoft și comunitatea open-source), folosit pe scară largă pentru API-uri web de înaltă performanță (ASP.NET Core), servicii cloud, aplicații desktop, jocuri (Unity) și unelte de linie de comandă. Versiunile moderne (C# 12 pe .NET 8 și .NET 9) oferă o sintaxă concisă, tipizare statică puternică cu suport nativ pentru nullable reference types, pattern matching avansat, înregistrări imutabile (record) și interogări declarative prin LINQ.

Această secțiune reunește cele mai importante 28 de elemente, clase, metode și comenzi din C# și .NET Base Class Library (BCL), grupate în șase categorii logice: bazele limbajului și I/O în consolă, prelucrarea șirurilor de caractere, colecții generice, interogări LINQ, programare orientată pe obiecte și asincronă (async / await), respectiv serializare JSON, clienți HTTP, fișiere și utilitarul dotnet CLI. Apasă pe oricare element din tabelul de mai jos pentru a vedea explicațiile detaliate, semnăturile metodelor, exemplele de cod C# 12 cu ieșirea lor reală și greșelile frecvente de evitat.

macOS • Windows • Linux

Ghid de instalare .NET SDK (C#) pe fiecare sistem de operare

Instalează .NET 8 / .NET 9 SDK și CLI-ul dotnet pe macOS, Windows și Linux și creează prima aplicație C# în 30 de secunde.

Cerințe de sistem: macOS 13+, Windows 10/11 sau Linux (Ubuntu, Debian, Fedora, Alpine); editor recomandat: VS Code cu extensia C# Dev Kit, Rider sau Visual Studio.

Terminal macOS (Homebrew / zsh)
# Instalare .NET SDK pe macOS (Apple Silicon & Intel) prin Homebrew:
brew install --cask dotnet-sdk

# Verificare versiune și creare proiect consolă C#:
dotnet --version
dotnet new console -n SalutCSharp
cd SalutCSharp && dotnet run

Bazele limbajului și I/O 5 comenzi

Șiruri de caractere (String) 4 comenzi

Colecții generice 4 comenzi

LINQ (Language Integrated Query) 6 comenzi

OOP modern și programare asincronă 5 comenzi

.NET BCL și CLI-ul dotnet 4 comenzi

Toate comenzile și funcțiile C#

Lista completă a elementelor explicate în această secțiune, cu sintaxa lor uzuală. Fiecare element are o pagină dedicată, cu explicații detaliate, parametri și exemple practice.

Bazele limbajului și I/O (5)

Element / Metodă Ce face
Console.WriteLine / ReadLine Afișează text în fluxul standard de ieșire și citește linii de text introduse de utilizator în consolă.
Console.WriteLine(valoare); string? input = Console.ReadLine();
Interpolarea șirurilor ($"...") Construiește șiruri de caractere lizibile prin încorporarea directă a expresiilor C# și a specificatorilor de formatare între acolade.
$"Text {expresie,aliniere:format}" | $"""Text raw pe mai multe linii {expresie}"""
var și tipurile de date (int, decimal, bool) Declară variabile puternic tipizate prin inferență la compilare (var) sau folosind tipurile fundamentale de valoare din .NET.
var nume = valoare; | int nr = 42; | decimal pret = 19.99m; | bool activ = true;
Tipuri Nullable (?, ??, ?.) Reprezintă explicit absența unei valori și previne excepțiile NullReferenceException prin operatori siguri de navigare și coalescență.
int? varsta = null; | string nume = input ?? "Implicit"; | int? lung = text?.Length;
switch expression și Pattern Matching Evaluează expresii concise bazate pe forma, tipul, proprietățile sau intervalele valorilor folosind pattern matching modern.
var rezultat = valoare switch { tip { Prop: > 10 } x => ..., _ => valoareImplicita };

Șiruri de caractere (String) (4)

Element / Metodă Ce face
String.Split / String.Join Desparte un șir de caractere într-un tablou de sub-șiruri după delimitatori și recompune o colecție într-un singur șir.
string[] parti = text.Split(separator, optiuni); | string rezultat = string.Join(separator, colectie);
Contains, StartsWith și EndsWith Verifică dacă un șir conține, începe sau se termină cu un anumit sub-șir și găsește poziția acestuia cu IndexOf.
bool gasit = text.Contains(sub, StringComparison.OrdinalIgnoreCase);
Replace, Trim și Substring Curăță spațiile de la capete, înlocuiește fragmente de text și extrage sub-șiruri prin Substring sau operatorul de interval (..).
string curat = text.Trim().Replace("vechi", "nou"); | string sub = text[start..end];
StringBuilder Construiește și modifică eficient șiruri de caractere într-un buffer mutabil, fără a aloca obiecte intermediare în bucle.
var sb = new StringBuilder(); sb.Append("..."); sb.AppendLine("..."); string rez = sb.ToString();

Colecții generice (4)

Element / Metodă Ce face
List<T> Stochează o listă generică redimensionabilă dinamic, cu acces rapid după index și metode de adăugare, ștergere și căutare.
List<string> lista = ["a", "b"]; lista.Add("c");
Dictionary<TKey, TValue> Stochează perechi cheie-valoare într-o tabelă de dispersie (hash table) cu căutare, inserare și ștergere în timp constant O(1).
var dict = new Dictionary<string, int>(); dict["cheie"] = 10; if (dict.TryGetValue("cheie", out int v)) { ... }
HashSet<T> Menține o mulțime neordonată de elemente unice cu verificare de apartenență în timp O(1) și operații matematice pe mulțimi.
var set = new HashSet<string>(); bool esteNou = set.Add("valoare");
Array și Span<T> Lucrează cu blocuri contigue de memorie și felii (slices) de înaltă performanță fără alocări suplimentare pe heap.
int[] arr = [1, 2, 3, 4]; Span<int> felie = arr.AsSpan(1, 2);

LINQ (Language Integrated Query) (6)

Element / Metodă Ce face
Enumerable.Where Filtrează declarativ o secvență de elemente pe baza unui predicat lambda, cu execuție amânată (deferred execution).
var filtrate = colectie.Where(x => conditie);
Enumerable.Select Proiectează (transformă) fiecare element al unei secvențe într-o formă nouă și aplatizează colecțiile imbricate cu SelectMany.
var proiectie = colectie.Select(x => new Dto(x.Id, x.Nume));
FirstOrDefault / SingleOrDefault Extrage un singur element dintr-o secvență (primul găsit sau unicul existent) ori returnează o valoare implicită când nu există potriviri.
var elem = colectie.FirstOrDefault(x => x.Id == id);
OrderBy / ThenBy Sortează secvențele crescător sau descrescător pe baza unuia sau mai multor criterii și extrage pagini cu Skip și Take.
var sortate = colectie.OrderBy(x => x.Categorie).ThenByDescending(x => x.Pret);
GroupBy Grupează elementele unei secvențe după o cheie comună pentru a calcula statistici, sume și agregări pe categorii.
var grupuri = colectie.GroupBy(x => x.Cheie); // fiecare grup g are g.Key și este IEnumerable<T>
Any, All, Count și Sum Evaluează condiții booleene rapide (cu scurtcircuitare) și calculează agregări numerice (Count, Sum, Average, Min, Max) peste colecții.
bool exista = colectie.Any(x => conditie); | int nr = colectie.Count(x => conditie); | decimal total = colectie.Sum(x => x.Pret);

OOP modern și programare asincronă (5)

Element / Metodă Ce face
Class, Properties { get; init; } și Primary Constructors Definește clase moderne cu proprietăți auto-implementate, inițializare sigură (init, required) și constructori primari conciși.
public class Serviciu(ILogger logger) { public required string Nume { get; init; } }
record și imutabilitate Definește într-o singură linie modele de date imutabile cu egalitate bazată pe valoare, afișare automată și clonare nedistructivă (with).
public record Produs(int Id, string Nume, decimal Pret); | var p2 = p1 with { Pret = 99m };
interface și tipuri generice <T> Definește contracte decuplate prin interfețe și scrie clase sau metode reutilizabile și sigure la compilare prin parametri generici <T>.
public interface IRepository<T> where T : class { Task<T?> GetByIdAsync(int id); }
async / await și Task<T> Execută operațiuni I/O neblocante (rețea, baze de date, fișiere) și coordonează sarcini concurente cu Task și Task.WhenAll.
public async Task<T> MetodaAsync(CancellationToken ct = default) { var rez = await OperatieAsync(ct); return rez; }
try / catch și using (IDisposable) Gestionează controlat excepțiile la rulare și eliberează garantat resursele externe (fișiere, conexiuni, stream-uri) prin IDisposable.
using var resursa = new StreamReader(cale); | try { ... } catch (TipExceptie ex) when (...) { ... } finally { ... }

.NET BCL și CLI-ul dotnet (4)

Element / Metodă Ce face
JsonSerializer (System.Text.Json) Serializează obiecte C# în format JSON și deserializează text JSON înapoi în tipuri puternic tipizate, cu performanță nativă ridicată.
string json = JsonSerializer.Serialize(obiect, optiuni); | T? obj = JsonSerializer.Deserialize<T>(json, optiuni);
HttpClient (GetFromJsonAsync) Trimite cereri HTTP asincrone către API-uri REST și deserializează direct răspunsurile JSON cu metodele din System.Net.Http.Json.
var date = await httpClient.GetFromJsonAsync<TDto>("https://api.exemplu.ro/v1/items", ct);
File.ReadAllText / WriteAllTextAsync Citește și scrie fișiere text sau linii pe disc (sincron și asincron) și construiește căi multi-platformă cu Path.Combine.
string continut = await File.ReadAllTextAsync(cale, ct); | await File.WriteAllTextAsync(cale, text, ct);
dotnet new / run / build / test / add package Creează proiecte, instalează pachete NuGet, compilează, rulează teste unitare și publică aplicații din linia de comandă.
dotnet new console -n App | dotnet add package NumePachet | dotnet run | dotnet publish -c Release