record — удобно создаём типы для хранения данных!
Иногда нужно создать класс, который просто хранит данные: имя, возраст, email или другие значения.
Обычно для этого пишут обычный класс:
Такой код рабочий, но для простых моделей данных он получается многословным.
В C# можно использовать
Теперь создадим объект и выведем его в консоль:
Вот что получится при запуске:
🔥
➡️ C# Ready | #практика
Иногда нужно создать класс, который просто хранит данные: имя, возраст, email или другие значения.
Обычно для этого пишут обычный класс:
class User
{
public string Name { get; set; }
public int Age { get; set; }
public User(string name, int age)
{
Name = name;
Age = age;
}
}
Такой код рабочий, но для простых моделей данных он получается многословным.
В C# можно использовать
record, чтобы описывать такие типы короче:csharp id="svqk8g"
using System;
record User(string Name, int Age);
Теперь создадим объект и выведем его в консоль:
csharp id="m79oqr"
User user = new User("Анна", 25);
Console.WriteLine(user);
Вот что получится при запуске:
csharp id="ww9ua2"
User { Name = Анна, Age = 25 }
record особенно удобен для моделей, где важны сами данные, а не сложное поведение объекта.record помогает писать короче и удобнее, когда тип нужен в первую очередь для хранения данныхPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3❤2
This media is not supported in your browser
VIEW IN TELEGRAM
AI-сервис, который помогает превращать заметки, PDF, статьи, видео и другие материалы в карточки для обучения и квизы. Нейросеть автоматически выделяет главное, генерирует вопросы и помогает быстрее запоминать информацию с помощью повторения и интерактивного формата обучения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4🔥3
С выходом C# 8 появился новый способ писать условия декларативно и лаконично.
Что важно знать:
• Возвращает результат без лишних строк в вашем коде.
• Упрощает обработку разных вариантов данных в одном месте.
• Обеспечивает явную проверку и надёжность кода при изменениях.
Так вы получите более читаемые условия и не пропустите ни одного случая.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍6🤝6❤3
Срезы коллекций — когда нужна часть, а лишнее не нужно!
Иногда требуется взять только кусок массива или строки: первые элементы, последние — или вырезать середину. Раньше ради этого писали
В C# 8 появились операторы диапазонов
Создадим массив данных:
Берём элементы со 2-го по 3-й (правый край не включён):
Последние два элемента:
Всё, кроме первых двух и последних двух:
То же со строкой — вытаскиваем слово «Index»:
🔥
➡️ C# Ready | #практика
Иногда требуется взять только кусок массива или строки: первые элементы, последние — или вырезать середину. Раньше ради этого писали
Substring, Skip / Take и плодили лишние аллокации. В C# 8 появились операторы диапазонов
.. и индексов с конца ^, которые делают такие операции короче и нагляднее.Создадим массив данных:
int[] data = { 10, 20, 30, 40, 50, 60 };Берём элементы со 2-го по 3-й (правый край не включён):
int[] middle = data[1..3]; // {20, 30}Последние два элемента:
int[] lastTwo = data[^2..]; // {50, 60}Всё, кроме первых двух и последних двух:
int[] withoutEdges = data[2..^2]; // {30, 40}То же со строкой — вытаскиваем слово «Index»:
string text = "Range & Index";
string word = text[^5..]; // "Index"
🔥
Range и Index делают код короче, читаемее и позволяют работать с Span<T> без копирования: меньше аллокаций — выше производительность!Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Если нужно быстро понять сложную тему, эта нейросеть автоматически превращает длинный текст, видео или статью в структурированную mind-map. Полезно для подготовки к экзаменам, изучения новой темы или планирования проектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤4👍2
Он отключает проверки типов на этапе компиляции, позволяя вызывать методы и обращаться к свойствам без точного указания типа. Удобно, когда структура данных неизвестна заранее.
Что важно знать:
• Позволяет работать с JSON без создания классов.
• Подходит для COM-объектов и слабо типизированных API.
• Ошибки появляются только во время выполнения.
Поэтому
dynamic полезен, когда нужно быстро взаимодействовать с внешними данными или писать универсальный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤4👍4
Почему IEnumerable лучше не перечислять несколько раз?
Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
На первый взгляд код нормальный.
Но
А потом
Для маленького массива это не проблема.
Но для тяжёлого источника данных это может быть дорого или даже привести к разным результатам.
Если нужен повторный доступ, лучше явно сохранить данные:
А если нужен только проход — не делай лишнюю проверку перед
🔥 IEnumerable<T> — это не всегда коллекция в памяти. Иногда это инструкция, как получить данные.
➡️ C# Ready | #совет
IEnumerable<T> выглядит как обычная коллекция, но это может быть не список.Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
if (orders.Count() > 0)
{
foreach (var order in orders)
Process(order);
}
На первый взгляд код нормальный.
Но
Count() может пройти всю последовательность.А потом
foreach пройдёт её ещё раз.Для маленького массива это не проблема.
Но для тяжёлого источника данных это может быть дорого или даже привести к разным результатам.
Если нужен повторный доступ, лучше явно сохранить данные:
var orderList = orders.ToList();
А если нужен только проход — не делай лишнюю проверку перед
foreach.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥2
Напоминалка по async/await в C#!
Например,
На картинке краткая шпаргалка по
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
Например,
await не создаёт новый поток, а приостанавливает выполнение метода и освобождает текущий поток, пока операция не завершится.На картинке краткая шпаргалка по
async и await: зачем нужна асинхронность, какие бывают return-типы (Task, Task<T>), как работает state machine, чем отличается последовательный await от Task.WhenAll() и какие ошибки часто приводят к блокировкам.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍5🤝5
Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }
• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.
• Лишняя синхронизация превращается в узкое место производительности.
Поэтому,
lock помогает писать стабильный и предсказуемый многопоточный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🤝5🔥3