Стрёмные records в C# 9-10.

Jun 18, 2022 09:59

Пошёл я тут почитать официальную документацию (reference) про records в C# (завезли в 9-й версии, прокачали в 10-й) и какой-то караул. На столько стрёмно сделанной фичи я ещё в этом языке не видел: грабли и засады раскиданы повсюду. Ну ок, может структуры имеют сопоставимое кол-во проблем эксплуатации. С ходу, где можно отхватить:

- Оператор with при копировании class record'а вызывает copy constructor, который можно задать самому. У struct record'а такой конструктор тоже можно задать, но with его не вызовет. Т.е. меняем class на struct и наш код перестаёт вызываться в некоторых странных местах. Приятной вам отладки №1.

- Positional record class иммутабелен. positional record struct - нет. Приятной вам отладки №2. Надо писать readonly record struct.

- ToString у нас почему-то стал методом для демонстрации отладочной информации. Алё, аффтары? DebuggerDisplay, не?

- record-классы можно наследовать. Приятной вам отладки №3 и сопровождения кода №1.

Отдельный разговор - это примеры кода в официальной документации. Вот такое, как вам: public string FirstName { get; set; } = default!; То есть в тексте, который смотрят тысячи новичков, мы демонстрируем, как поломать null safety типизацию бомбой сильно замедленного действия!?

Ощущение такое, что весь проект делал какой-то студент-троечник, которого на лето взяли попрактиковаться. Зато преподаватели C# должны быть рады. Им теперь привалило работы: учить людей как всем этим дерьмом пользоваться, что бы не отстрелить себе ноги.

csharp, жуки, впечатления

Previous post Next post
Up