Dacă vă interesează să vedeți într-un mod mai aplicat capabilitățile interesante ale C# 10, puteți sa mergeți aici: https://github.com/buggy-line/dotnetsix
Veți găsi câteva scenarii interesante cu exemple clare.
Microsoft reference: here
Câteva dintre capabilitățile și îmbunătățirile introduse în C# 10:
- Interpolare cu șiruri de caractere: C# 10 introduce posibilitatea de a utiliza expresii complexe și variabile în interpolarea șirurilor de caractere. Aceasta facilitează construirea de șiruri de caractere complexe și dinamice. (reference here)
string firstName = "John"; string lastName = "Doe"; int age = 30; string message = $"{firstName} {lastName} are {age} de ani."; Console.WriteLine(message); Rezultat: John Doe are 30 de ani. - Pattern-uri în switch: Versiunea anterioară a C# a introdus expresii pattern în instrucțiunea switch, iar C# 10 aduce noi îmbunătățiri în această funcționalitate. Acum, pattern-urile pot fi utilizate și pentru tipuri generice și pentru structuri de date complexe. (reference here)
public enum AnimalType { Dog, Cat, Bird, Other } public static void PrintAnimalSound(AnimalType animalType) { switch (animalType) { case AnimalType.Dog: Console.WriteLine("Woof!"); break; case AnimalType.Cat: Console.WriteLine("Meow!"); break; case AnimalType.Bird: Console.WriteLine("Chirp!"); break; case AnimalType.Other: Console.WriteLine("Unknown animal."); break; } } PrintAnimalSound(AnimalType.Dog); // Output: Woof! PrintAnimalSound(AnimalType.Cat); // Output: Meow! PrintAnimalSound(AnimalType.Bird); // Output: Chirp! PrintAnimalSound(AnimalType.Other);// Output: Unknown animal. - Inițializarea proprietăților și câmpurilor cu valori implicite: C# 10 permite inițializarea implicită a proprietăților și câmpurilor în momentul declarării lor, eliminând necesitatea de a le atribui manual o valoare implicită.
public class Person { public string Name { get; init; } = "John Doe"; public int Age { get; set; } = 30; public bool IsStudent { get; set; } = false; public void PrintDetails() { Console.WriteLine($"Name: {Name}, Age: {Age}, Is Student: {IsStudent}"); } } Person person = new Person(); person.PrintDetails(); Rezultat: Name: John Doe, Age: 30, Is Student: False - Funcții locale în expresii lambda: C# 10 permite definirea de funcții locale în cadrul unei expresii lambda, fără a fi nevoie să le extragem în afara acesteia. Acest lucru facilitează scrierea de cod mai concis și mai clar.
public static void PerformCalculation(int x, int y) { int AddNumbers(int a, int b) => a + b; int MultiplyNumbers(int a, int b) => a * b; int sum = AddNumbers(x, y); int product = MultiplyNumbers(x, y); Console.WriteLine($"Sum: {sum}"); Console.WriteLine($"Product: {product}"); } PerformCalculation(5, 3); Rezultat: Sum: 8 Product: 15 - Îmbunătățiri ale inferenței de tipuri: C# 10 aduce îmbunătățiri în inferența de tipuri, ceea ce înseamnă că compilerul poate deduce mai bine tipurile variabilelor și expresiilor, reducând necesitatea specificării explicite a tipurilor.
var name = "John Doe"; var age = 30; var isStudent = false; Console.WriteLine($"Name: {name} (Type: {name.GetType()}), Age: {age} (Type: {age.GetType()}), Is Student: {isStudent} (Type: {isStudent.GetType()})"); Rezultat: Name: John Doe (Type: System.String), Age: 30 (Type: System.Int32), Is Student: False (Type: System.Boolean)