Главное, что подкупает в рекордах это возможность сделать так:
var neoPerson = person with { FullName = "Neo" };
✅ Чем это круто? Тем, что neoPerson будет совершенно новым объектом, со своей ссылкой, но с одним измененным свойством. Но самое главное – это вообще единственный способ поменять что-то в рекорде. Это дает простой способ сделать класс (а рекорды под капотом это обычные классы) иммутабельным.
🕔 Раньше, если вы хотели добиться от класса подобной иммутабельности, то вы бы поели говна из копипасты. Типа:
var personClass = new PersonClass("Laurence Fishburne", new DateOnly(0,1,1));
var morpheusPersonClass = new PersonClass("Morpheus", personClass.DateOfBirth);
И, чем больше полей, тем больше копипасты. Либо пришлось бы придумывать какие-то методы, которые бы по-умному клонировали объект. В общем дело было швах, а теперь иммутабельность можно нести в массы!
🛡Как это применить в проде?
Если у вас есть вот такой класс, к примеру
public class PersonClass
{
public PersonClass(string fullName, DateOnly dateOfBirth)
{
FullName = fullName;
DateOfBirth = dateOfBirth;
}
public string FullName { get; }
public DateOnly DateOfBirth { get; }
}
Можете смело заменить его на
public record Person(string FullName, DateOnly DateOfBirth);
Нужно будет поправить некоторые места в проекте, но по одному классу в день и рано или поздно весь проект переползет на рекорды.