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

Автор: @energy_it

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
Читаем файлы асинхронно с await using!

Сейчас научимся читать файлы без блокировок и утечек памяти — с помощью await using. Это удобно и безопасно: ресурсы освобождаются даже в случае ошибки, а чтение не тормозит основной поток.

Подключим нужные библиотеки из стандартной библиотеки .NET:
using System;
using System.IO;
using System.Threading.Tasks;


Допустим, мы читаем файл обычным синхронным способом, без защиты:
FileStream fs = new FileStream("data.txt", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string text = await reader.ReadToEndAsync();


Если возникнет исключение — потоки не будут закрыты. Ресурсы останутся висеть, и Dispose() никто не вызовет.

Теперь перепишем этот код с безопасной конструкцией await using:
await using FileStream fs = new FileStream("data.txt", FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
using StreamReader reader = new StreamReader(fs);

string text = await reader.ReadToEndAsync();
Console.WriteLine(text);


Мы создаём поток с флагом useAsync: true и оборачиваем его в await using, чтобы автоматически вызвать Dispose().

🔥 Благодаря этому, чтение файла идёт в фоне, а ресурсы гарантированно освобождаются после выхода из блока — даже при исключениях.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥65
👩‍💻 Познакомимся с методами Convert — надёжным инструментом для приведения данных нужному типу!

С их помощью можно легко преобразовывать строки и числа в нужные типы, такие как int, double, bool, а также выполнять универсальное преобразование с помощью ChangeType и работать с Base64 для сериализации и передачи данных.

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🤝10👍74
😎 Отличная статья по теме машинного обучения: пошаговый гайд на C# по работе с данными и созданию модели!

В этой статье:
• Установка и базовая настройка библиотеки Accord.NET
• Загрузка и предварительная подготовка набора данных
• Тестирование, оценка точности и прогнозирование результатов

🟡 Рекомендую прочитать на Habr!


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥5
👩‍💻 Нормализация телефонных номеров в тексте!

Делаем консольную утилиту на C#, которая находит номера, начинающиеся с +7 или 8, и приводит их к единому формату

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

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

Извлекаем нужные цифры, игнорируя пробелы, скобки и тире.

Форматируем найденные номера в удобный и читаемый вид.


Полезно, когда нужно унифицировать контактную информацию в текстах, базах данных и логах.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38🤝75👍2👎1
Возвращаем несколько значений с помощью Tuples и деконструкции!

В C# часто возникает ситуация, когда метод должен вернуть сразу несколько значений. Раньше для этого использовали out‑параметры или создавали отдельные классы и структуры.

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

Для начала подключим нужную библиотеку:
using System;


Теперь опишем метод, который возвращает кортеж из двух значений:
public (int Sum, int Product) Calculate(int a, int b)
{
return (a + b, a * b);
}


Вызовем метод и используем деконструкцию, чтобы сразу получить оба значения:
var (sum, product) = Calculate(3, 4);
Console.WriteLine($"Sum: {sum}, Product: {product}");


Вот что получится при запуске:
Sum: 7, Product: 12


🔥 Благодаря Tuple и деконструкции ты можешь возвращать несколько значений без лишнего кода и out‑параметров.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥13👍7
🤝9🔥64
Что же выведет консоль?
Anonymous Quiz
11%
A
20%
B
47%
C
21%
D
👍94🔥4
👩‍💻 Разбираемся с lock — простой защита от гонок потоков и порчи общих данных!

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

Что важно знать:

Оборачивай работу с разделяемым состоянием в lock (locker) { ... }

Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.

Лишняя синхронизация превращается в узкое место производительности.


Поэтому, lock помогает писать стабильный и предсказуемый многопоточный код.

C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥237👍6🤝3