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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
👩‍💻 Форматируем байты в понятные размеры!

Берём одно число в байтах и превращаем его в удобный формат: 1,15 ГБ, 756,4 МБ или 512 Б. Сразу видно, сколько это на самом деле — вместо того, чтобы считать нули глазами.

В этой задаче ты:

Определишь подходящую единицу измерения (Б, КБ, МБ, ГБ, ТБ) по величине числа;

Реализуешь функцию, которая делит размер на 1024 и аккуратно округляет результат до двух знаков после запятой;

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


Такое форматирование делает статистику по файлам, загрузкам и хранилищам гораздо понятнее — и тебе, и тем, кто будет читать логи после тебя.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1610👍6🤝1
📂 Напоминалка по созданию грамотных RESTful API!

Например, корректное использование HTTP-методов и чёткая структура эндпоинтов делают API предсказуемым и удобным для интеграции.

На картинке — 8 ключевых принципов, которые стоит учитывать при проектировании API: от версионирования и семантических путей до batch-операций и продуманного query-языка.

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍97👎1🤝1
Цветной лог в консоли через Console.ForegroundColor — ошибки сразу в глаза!

Обычный консольный лог — это сплошная серая простыня текста. Гораздо приятнее, когда ошибки красные, предупреждения жёлтые, а успешные операции зелёные.

В .NET это делается в пару строк через Console.ForegroundColor.

Подключать ничего дополнительно не нужно, достаточно стандартного System:
using System;


Сделаем маленький «логгер» с тремя уровнями: Info, Warn и Error — каждый со своим цветом:
static class Logger
{
public static void Info(string message) =>
Write("INFO", message, ConsoleColor.Green);

public static void Warn(string message) =>
Write("WARN", message, ConsoleColor.Yellow);

public static void Error(string message) =>
Write("ERROR", message, ConsoleColor.Red);

private static void Write(string prefix, string message, ConsoleColor color)
{
var prev = Console.ForegroundColor;

Console.ForegroundColor = color;
Console.WriteLine($"{prefix}: {message}");
Console.ForegroundColor = prev; // возвращаем старый цвет
}
}


Теперь пользоваться таким логгером очень просто:

Logger.Info("Сервис успешно запущен");
Logger.Warn("Конфиг не найден, используем значения по умолчанию");
Logger.Error("Не удалось подключиться к базе данных");


В консоли сразу видно, где успех, где потенциальная проблема, а где уже всё плохо — цветом подсвечено без всякой сложности в коде.

🔥 Главное — всегда возвращать предыдущий цвет (prev), чтобы не поломать остальной вывод консоли.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍169🔥6
👩‍💻 Когда null перестаёт ломать программу?

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

В этом гайде:

Покажем, как аккуратно обращаться с возможными пустыми значениями;

Разберём приёмы, которые заменяют громоздкие проверки в коде;

Поможем сделать поведение программы стабильным даже при ошибках ввода.


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

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥148🤝4
14👍13🔥8😁7
Передаём переменные по ссылке с помощью ref!

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

Подключим нужные библиотеки — всё уже есть в стандартной библиотеке:
using System;


Допустим, у нас есть метод, который увеличивает значение числа:
void Increment(ref int number)
{
number++;
}


Создадим переменную и передадим её в метод по ссылке:
int value = 5;
Increment(ref value);
Console.WriteLine(value);


🔥 Без ref переменная осталась бы равной 5 — метод работал бы с копией. А с ним мы передаём реальную переменную, и её значение меняется внутри метода.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1510🔥7😁1
🐱 Обзор нововведений в C# 12 — компактный разбор ключевых фич свежей версии языка!

В этой статье:
• Разбираются первичные конструкторы и влияние на архитектуру классов
• Показываются выражения коллекций и упрощение работы со списками
• Объясняются новые возможности алиасов типов и параметры по умолчанию

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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥117👍4😁1
Как перестать писать if (str != null && str.Trim() != "") ??

Во вводе пользователя и данных из внешних систем мы постоянно боимся null и пустых строк — в итоге условия разрастаются:
string name;
if (user.InputName != null && user.InputName.Trim() != "")
{
name = user.InputName.Trim();
}
else
{
name = "Гость";
}


С string.IsNullOrWhiteSpace то же самое записывается гораздо короче и понятнее:
var name = string.IsNullOrWhiteSpace(user.InputName)
? "Гость"
: user.InputName.Trim();


string.IsNullOrWhiteSpace сразу проверяет три вещи: строка не null, не пустая и не состоит из одних пробелов.

🔥 Вместо громоздких ручных проверок используем один метод — меньше шума в условиях, меньше шансов забыть про крайний случай, а код читается как простое правило: «если имя не задано — подставь "Гость"».

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥13👍9😁3
🔥13👍61
Перестаём плодить new HttpClient() с IHttpClientFactory!

Частая ошибка: в каждом методе делать new HttpClient(). В итоге — утечки сокетов, странные таймауты и боль в проде. В .NET есть нормальный способ — IHttpClientFactory.

Сначала регистрируем фабрику и настраиваем клиент в DI:
using System;
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();

services.AddHttpClient("github", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.UserAgent.ParseAdd("CSharpReadySample");
});

var provider = services.BuildServiceProvider();


Достаём IHttpClientFactory и берём настроенный клиент по имени:
var factory = provider.GetRequiredService<IHttpClientFactory>();

using var client = factory.CreateClient("github");

var response = await client.GetAsync("repos/dotnet/runtime");
var content = await response.Content.ReadAsStringAsync();

Console.WriteLine(content[..200] + "...");


🔥 Главное — вместо десятков new HttpClient() используйте один IHttpClientFactory: настроили клиент в одном месте, берёте его из DI где нужно — без утечек и с предсказуемым поведением в проде.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍85👎1😁1
🧐 Напоминалка по netcat!

На картинке — компактная шпаргалка по nc: от сканирования портов до туннелей, чата и копирования дисков прямо из терминала.

Сохрани, чтобы под рукой был швейцарский нож сетевика!

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍108🔥7
👩‍💻 IEnumerable vs IQueryable без путаницы!

В этой шпаргалке разбираемся, чем отличается работа LINQ по уже загруженным коллекциям от “живых” запросов к базе: где на самом деле исполняется код, как влияет отложенное выполнение и материализация

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤝13🔥81
👍 Разбор C# async/await — понятное объяснение асинхронности без чёрной магии!

В этой статье:

• Когда использовать асинхронность: IO-bound против CPU-bound операций
• Как async/await компилятором превращается в машину состояний
• Примеры Task, ValueTask, WhenAny и обработка исключений без магии

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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍7🔥6