3 функции C# 12 , которые поразят вас🤯
Приготовьтесь к хорошим новостям! Microsoft добавила много классных новых возможностей в C# 12 Preview. В этом посте мы погрузимся них. Итак, поехали!
Первичные конструкторы для не рекордных классов и структур.
Это первая возможность C# 12 Preview. Эта возможность поможет сократить количество кода и упростит инициализацию свойств, а так же использование параметров конструктора в методах и аксессорах.
public class Student(int id, string name, IEnumerable<decimal> grades)
{
public Student(int id, string name) : this(id, name, Enumerable.Empty<decimal>()) { }
public int Id => id;
public string Name { get; set; } = name.Trim();
public decimal GPA => grades.Any() ? grades.Average() : 4.0m;
}
В приведенном выше примере Student, первичные параметры конструктора доступны во всем теле кода.
Например, мы можем сделать это с параметром Name (задается параметром name.Trim()). Кроме того, параметр grades используется в свойстве accessor для GPA.
Итак, вы знаете, что свойства не создаются автоматически, для первичных параметров конструктора, в не рекордных классах и структурах? Оказывается, их нужно создавать самостоятельно, чтобы показать, какие данные открыты. Это вполне соответствует тому, как обычно используются классы, верно?
И вот что самое интересное: первичные конструкторы могут стать настоящим спасением! Когда речь идет о том, чтобы избежать хлопот, связанных с объявлением приватных полей и привязкой значений параметров к этим полям, в этих скучных телах конструкторов.
Хотите узнать, как это сделать? Просто добавьте инициализатор this(…), чтобы вызвать другой конструктор для того же класса или структуры, убедившись, что первичный конструктор участвует в работе.
Использование директив для дополнительных типов
Эта новая возможность, появившаяся в C# 12, не ограничивается типами значений без нуля, а также включает кортежи с типами элементов или именами.
Вот пример использования псевдонимов для типов:
using Measurement = (string Units, int Distance);
using PathOfPoints = int[];
using DatabaseInt = int?;
В примере выше, мы создаем псевдонимы для кортежа, массива целых чисел и целого числа с нулевым значением.
Эти псевдонимы можно использовать вместо исходного типа в любом месте, где этот тип обычно используется:
public void CalculateDistance(PathOfPoints points)
{ }
Значения по умолчанию для лямбда-выражений
Эта функция похожа на значения по умолчанию для параметров регулярных методов, и она позволяет разработчикам создавать более гибкие и лаконичные лямбда-выражения.
Просто добавьте знак равенства и значение, которое вы хотите присвоить параметру, после его объявления.
Например, (int addTo = 2) => addTo + 1 устанавливает значение по умолчанию 2 для параметра addTo, которое будет использоваться, если при вызове лямбда-выражения значение не будет указано:
var addWithDefault = (int addTo = 2) => addTo + 1;
addWithDefault(); // 3
addWithDefault(5); // 6
Благодаря этому, вам не придется полагаться на System’s DefaultParameterValue. Чтобы сделать код более лаконичным и читабельным, используйте пространство имен InteropServices для установления значений по умолчанию для параметров лямбда-выражений.
До появления C# 12, разработчикам приходилось использовать локальную функцию или атрибут DefaultParameterValue, для задания значений параметров по умолчанию для лямбда-выражений. Такой подход был более громоздким и менее интуитивным, чем новый синтаксис.
Он позволяет разработчикам писать более лаконичный и читабельный код, поскольку они могут указывать значения по умолчанию для часто используемых параметров.
Также, это помогает избежать повторения похожих лямбда-выражений с незначительными различиями в значениях параметров.
Наконец, значения параметров по умолчанию для лямбда-выражений, включаются в метаданные и доступны через отражение. Это облегчает разработчикам написание кода, динамически использующего лямбда-выражения.
Заключение
В этой статье мы рассмотрели некоторые из новых возможностей, которые Microsoft представила в C# 12 Preview.
Эти новые возможности помогут разработчикам писать более лаконичный и читабельный код.
Microsoft постоянно работает над улучшением языка C#, чтобы сделать его более эффективным и удобным для разработчиков. В ближайшем будущем разработчики могут ожидать еще больших улучшений в этой платформе.