C# Ready | Unity
10.1K subscribers
1.19K photos
62 videos
547 links
Авторский канал по разработке на C# и Unity.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3SBaT3

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🤨 LINQPad — интерактивная “песочница” для C#/.NET и запросов к базам данных!

Настольный scratchpad от Джозефа Альбахари: можно быстро писать и запускать C#-скрипты, проверять идеи без создания проектов, а ещё — удобно ходить по данным и джойнить сущности через LINQ или писать обычный SQL.

📌 Оставляю ссылочку: linqpad.net

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥5👍3
Как перестать писать “магические строки” в логах и ошибках?

Часто в логирование и исключения попадают строки вроде "CreateUser" или "UserService" — и как только ты переименовал метод/файл, эти строки не обновились. В итоге логи врут, а поиск по проекту ломается.

Для имён используй nameof() — он безопасен при рефакторинге:
throw new InvalidOperationException(nameof(CreateUser));


А чтобы автоматически подставлять место вызова (метод/файл/строку) — есть caller info атрибуты:
[CallerMemberName] string member = "",
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0


Теперь ты пишешь просто:
Log.Info("User created");

а в выводе уже будет, откуда это пришло.

🔥 Как итог меньше ручных строк, логи и сообщения не “стареют” после переименований, а диагностика становится точнее без дополнительного кода.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🔥6
👍2911🔥9
with-выражение: обновляем объект без мутаций и лишнего кода!

Иногда нужно изменить всего одно поле, но при этом не трогать исходный объект. Например, обновить имя пользователя, сохранив все остальные значения.

Раньше приходилось создавать новый объект вручную и копировать остальные свойства:
record User(string Name, int Age, string City);

var user = new User("Анна", 28, "Helsinki");

var updated = new User(
"Анна Петрова",
user.Age,
user.City
);

Console.WriteLine(user);
Console.WriteLine(updated);


Такой код быстро превращается в копипасту: чем больше полей, тем больше риск забыть что-то перенести или случайно перепутать.

С with-выражением можно скопировать объект и изменить только нужные свойства:
record User(string Name, int Age, string City);

var user = new User("Анна", 28, "Helsinki");

var updated = user with { Name = "Анна Петрова" };

Console.WriteLine(user);
Console.WriteLine(updated);


Исходный объект остаётся прежним, а updated — это новая копия с изменённым значением.

🔥 Итог: меньше шаблонного копирования, меньше ошибок и удобный путь к иммутабельному коду.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍208🔥4
📂 Шпаргалка по IP-адресам!

Например, 192.168.x.x — для домашней сети, а 10.x.x.x — для крупных корпоративных систем. CIDR (/24, /16, /8) — помогает точно задать размер подсети и количество хостов.

На картинке — всё, что нужно знать про IP: диапазоны, маски, специальные адреса, публичные DNS и основы IPv6.

Сохрани, чтобы не забыть!

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍7🤝5
8👍3🔥3🤝1
Что же выведет консоль?
Anonymous Quiz
64%
A
6%
B
21%
C
9%
D
11👍4🔥3🤝1
🔥18👍87
Как создавать строки без лишних аллокаций?

Самый частый антипаттерн — склеивать строки через +. Каждая конкатенация создаёт новую строку, и при активном логировании или форматировании это начинает бить по памяти и GC.

Для обычного кода достаточно интерполяции — она читается лучше и компилятор оптимизирует её:
var text = $"Имя: {name}, возраст: {age}";


Но в горячих местах (логи, сериализация, парсинг) есть string.Create, который позволяет сразу записать результат в выделенный буфер:
string.Create(length, state, (span, data) => { ... });


🔥 В 90% случаев используй интерполяцию ради читаемости, а string.Create оставь для действительно нагруженных участков — меньше аллокаций, меньше давления на GC, больше контроля над созданием строки.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍4🔥3
😎 Шпаргалка по основам C#!

На картинке — компактная памятка с самым нужным по C#: каркас программы, основные операторы и выражения, функции и параметры, структуры и примеры работы с данными. Отдельно показан Console I/O: ввод/вывод, escape-последовательности и быстрые примеры преобразований типов.

Сохрани, чтобы быстро освежать синтаксис и не отвлекаться на поиск мелочей во время практики, задач и подготовки к собеседованиям.

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥65
👩‍💻 Логгер в файл, который делает проект “взрослее”!

Пара методов — и твоя программа начинает вести аккуратный журнал событий: что произошло, когда произошло и насколько это важно.

В этой задаче узнаешь:

Как писать логи в файл одной строкой через File.AppendAllText;

Зачем нужны уровни INFO/WARN/ERROR и как их удобно оформить через enum;

Как сделать обёртки, чтобы логирование выглядело красиво и читалось мгновенно.


Один раз собрал — и дальше просто вставляешь в любой проект, чтобы быстрее находить ошибки и понимать, что происходит внутри.

C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥268👍8
Media is too big
VIEW IN TELEGRAM
CSharpier — это инструмент для автоматического форматирования кода на C# по строгим и предсказуемым правилам, предлагая единый стиль форматирования для улучшения читаемости и поддержания консистентности кода.

Оставляю ссылочку: Github 📱


➡️ C# Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥4🤝3
FormattableString: перехватываем интерполяцию строки до того, как она станет string!

Иногда интерполированную строку хочется не просто вывести, а обработать “умно”: например, отправить в лог с параметрами, локализовать, или сохранить шаблон отдельно от значений.

Обычно интерполяция сразу превращается в готовую строку, и ты теряешь структуру:
var user = "Анна";
var age = 28;

string text = $"Пользователь {user}, возраст {age}";
Console.WriteLine(text);


Здесь в переменной уже обычный string, а исходные значения и формат “слились” в одну строку.

Если принять FormattableString, можно получить и шаблон, и аргументы отдельно:
FormattableString msg = $"Пользователь {user}, возраст {age}";

Console.WriteLine(msg.Format);
Console.WriteLine(string.Join(", ", msg.GetArguments()));


msg.Format вернёт шаблон вида "Пользователь {0}, возраст {1}", а GetArguments() — массив значений, которые подставлялись в интерполяцию.

🔥 Итог: можно логировать и локализовать интерполированные строки правильно — сохраняя шаблон и параметры, а не только готовый текст.

C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥6👍4
❤️ Крутая статья — быстрый вход в Roslyn: как своими руками собрать простой анализатор!

В этой статье:
• Поймёшь, как устроены SyntaxTree и SemanticModel без перегруза
• Увидишь, как обходить узлы дерева и находить нужные конструкции
• Разберёшь минимальный скелет анализатора, диагностики и запуск на проекте

🔊 Продолжай читать на Habr!


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍3🔥3
List.ForEach для компактных действий над списком!

Сейчас научимся быстро выполнять действия над элементами списка без шаблонного цикла foreach — с помощью встроенного метода List.ForEach.

Для начала подключим стандартные библиотеки — всё уже включено:
using System;
using System.Collections.Generic;


Создадим простой список чисел:
List<int> numbers = new() { 1, 2, 3, 4, 5 };


Вот как это обычно делается с использованием стандартного цикла:
foreach (var n in numbers)
Console.WriteLine(n);


Теперь то же самое, но с использованием ForEach — короче и нагляднее:
numbers.ForEach(Console.WriteLine);


Если нужно выполнить более сложное действие — например, вывести квадраты чисел — можно передать лямбда-выражение:
numbers.ForEach(n => Console.WriteLine(n * n));


🔥 Метод ForEach избавляет от шаблонного кода, делает перебор наглядным и экономит место

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍7🔥4
👍138🔥7