Пошёл я тут почитать
официальную документацию (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# должны быть рады. Им теперь привалило работы: учить людей как всем этим дерьмом пользоваться, что бы не отстрелить себе ноги.