Я пока не нашёл даты выхода C# 12, скорей всего он станет частью .NET 8 и его можно пощупать, если скачать превью. Майкрософт представили несколько новых фишек, самая крутая из них наверно вот эта:
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;
}
Код взят с сайта Майкрософт, я сам превью не устанавливал и не щупал. Смысл тестировать на превью, если это будет не рабочий проект, проще уже просто посмотреть на примеры кода и всё.
Что здесь крутого? У нас класс и сразу после его объявления в скобках идут параметры. Зачем? У класса могут быть какие-то параметры? Да, они могут быть при создании и передаются конструктору, так что это новый вариант описания конструктора, который просто получает значения и тут же просто сохраняет их в полях класса.
Чтобы мы явно не писали конструктор в таких случаях, мы просто указываем нужные параметры сразу после имени класса и потом при объявлении полей копируем значения. Например, вот так параметр конструктора id попадёт в поле Id:
public int Id => id;
Конструкторы очень редко делают что-то более, чем сохранение значений. В Веб мы очень много получаем зависимостей и теперь в контроллере скорей всего мы больше не будем писать контроллера, а будем писать что-то типа:
public class LoginController(IAuth auth)
private readonly IAuth Auth => auth;
public IActionResult Index() {
}
}
Мне кажется, что это норм.
Второе улучшение – расширение using до использования любых типов данных и таким образом мы сможем делать псевдонимы для типов данных:
using Measurement = (string, int);
using PathOfPoints = int[];
using DatabaseInt = int?;
Проще говоря тип данных PathOfPoints это псевдоним для массива из чисел.
Тут пока не уверен, что буду использовать часто, но попробую.
Ну и еще одна возможность – значения по умолчанию для лямбда выражений:
var addWithDefault = (int addTo = 2) => addTo + 1;
addWithDefault(); // 3
addWithDefault(5); // 6
Я и в простом коде стараюсь не использовать значения по умолчанию, только в крайнем случае, а в лямбдах… ну возможно буду когда-то использовать.
В общем жду, попробую когда выйдет C# 12
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 1 человек
Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.
Добавить Комментарий