Ответ
В C# 10 и 11 появилось несколько важных функций, повышающих продуктивность и читаемость кода.
Ключевые нововведения:
-
Record structs (C# 10): Иммутабельные структуры с автоматически генерируемыми методами
Equals,GetHashCodeиToString. Идеальны для небольших данных, передаваемых по значению.public readonly record struct Point(int X, int Y); var p1 = new Point(1, 2); var p2 = p1 with { X = 3 }; // Новая запись с измененным X -
Global using directives (C# 10): Позволяют объявить директиву
usingодин раз для всего проекта, убирая её из каждого файла.// GlobalUsings.cs global using System; global using System.Collections.Generic; -
File-scoped namespaces (C# 10): Упрощает объявление пространства имён, уменьшая отступы во всём файле.
namespace MyApp.Services; // Фигурные скобки для всего файла не нужны public class UserService { ... } -
Улучшения pattern matching (C# 10/11): Расширенные реляционные паттерны и паттерны в списках.
bool IsLetter(char c) => c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z'); -
Raw string literals (C# 11): Удобны для записи JSON, XML, SQL или многострочного текста без экранирования кавычек.
string json = """ { "name": "John", "age": 30 } """; -
Required members (C# 11): Гарантирует инициализацию свойств или полей при создании объекта.
public class Person { public required string FirstName { get; init; } public required string LastName { get; init; } } // new Person(); // Ошибка компиляции var p = new Person { FirstName = "John", LastName = "Doe" }; // OK