Start Debugging

Тег: csharp-14

26 статей · Страница1из3

Что на самом деле копирует выражение `with` в C# и почему вычисляемые свойства record не пересчитываются?
Выражение with вызывает сгенерированный компилятором метод <Clone>$ записи, который запускает конструктор копирования: он копирует каждое поле экземпляра и пропускает все инициализаторы. Поэтому свойства, инициализированные из других свойств, кешированные значения и идентификаторы Guid оказываются устаревшими. Измерения на .NET 10 с C# 14 и исправления, которые действительно работают.
Что такое ref-safe-context в C# и как компилятор определяет его для ref-локальных переменных
ref-safe-context это область, в которой ссылка на переменную остаётся валидной. Разбираем четыре контекста, правило, фиксирующее контекст ref-локальной переменной по её инициализатору, почему ref-переназначение никогда не может ни расширить, ни сузить контекст, и ошибки CS8157, CS8168, CS8374 и CS9079, которые из этого следуют, с выводом компилятора C# 14 на .NET 10 и .NET 11 RC1.
Возврат Task напрямую против проброса через async/await в методе репозитория на C#: что выбрать?
Отказ от async/await в пробрасывающем методе репозитория экономит около 6 нс и 72 байта, а стоит вам кадра стека, семантики try/catch и безопасного освобождения ресурсов. Оставляйте return await, если метод не является чистым пробросом на измеренном горячем пути.
Как написать статический член расширения, применимый ко всем типам enum в C# 14
Объявите обобщённый блок extension с ограничением struct, Enum и получите Status.Values, Status.Count и Status.Parse для каждого enum в решении. Форма получателя, ловушки CS0704 и CS0428 и почему Enum.GetValues нужно кешировать.
Как заставить System.Text.Json игнорировать свойство с модификатором required
[JsonIgnore] на члене с required выбрасывает InvalidOperationException: marked required but does not specify a setter. Почему эти две возможности конфликтуют и четыре способа всё же проигнорировать свойство, измерено на .NET 10.
Решение: CS8618 "Non-nullable property must contain a non-null value when exiting constructor" в C#
CS8618 означает, что ссылочное поле или свойство, не допускающее null, не было инициализировано к моменту завершения конструктора. Присвойте его в конструкторе, задайте значение по умолчанию, пометьте required или сделайте допускающим null.
Вперёд