Когда в коде появляются пустые ссылки, маленький знак вопроса способен спасти программу от падения и превратить проверки в понятные выражения.
В этом гайде:
• Покажем, как аккуратно обращаться с возможными пустыми значениями;
• Разберём приёмы, которые заменяют громоздкие проверки в коде;
• Поможем сделать поведение программы стабильным даже при ошибках ввода.
Один небольшой оператор вокруг значения часто заменяет несколько
if и спасает от неожиданных падений.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥14❤8🤝4
Передаём переменные по ссылке с помощью ref!
Сейчас научимся передавать переменные в методы по ссылке, а не по значению. Это особенно полезно, когда нужно изменить переменную внутри метода и сохранить изменения снаружи.
Подключим нужные библиотеки — всё уже есть в стандартной библиотеке:
Допустим, у нас есть метод, который увеличивает значение числа:
Создадим переменную и передадим её в метод по ссылке:
🔥 Без
➡️ C# Ready | #практика
Сейчас научимся передавать переменные в методы по ссылке, а не по значению. Это особенно полезно, когда нужно изменить переменную внутри метода и сохранить изменения снаружи.
Подключим нужные библиотеки — всё уже есть в стандартной библиотеке:
using System;
Допустим, у нас есть метод, который увеличивает значение числа:
void Increment(ref int number)
{
number++;
}
Создадим переменную и передадим её в метод по ссылке:
int value = 5;
Increment(ref value);
Console.WriteLine(value);
ref переменная осталась бы равной 5 — метод работал бы с копией. А с ним мы передаём реальную переменную, и её значение меняется внутри метода.Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤10🔥7😁1
В этой статье:
• Разбираются первичные конструкторы и влияние на архитектуру классов• Показываются выражения коллекций и упрощение работы со списками• Объясняются новые возможности алиасов типов и параметры по умолчанию🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤7👍4😁1
Как перестать писать
Во вводе пользователя и данных из внешних систем мы постоянно боимся
С
🔥 Вместо громоздких ручных проверок используем один метод — меньше шума в условиях, меньше шансов забыть про крайний случай, а код читается как простое правило: «если имя не задано — подставь "Гость"».
➡️ C# Ready | #совет
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, не пустая и не состоит из одних пробелов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥13👍9😁3
Перестаём плодить new HttpClient() с IHttpClientFactory!
Частая ошибка: в каждом методе делать
Сначала регистрируем фабрику и настраиваем клиент в
Достаём
🔥 Главное — вместо десятков
➡️ C# Ready | #практика
Частая ошибка: в каждом методе делать
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 где нужно — без утечек и с предсказуемым поведением в проде.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍8❤5👎1😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤝13🔥8❤1
В этой статье:
• Когда использовать асинхронность: IO-bound против CPU-bound операций• Как async/await компилятором превращается в машину состояний• Примеры Task, ValueTask, WhenAny и обработка исключений без магии🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍7🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Блог про C# и .NET с упором на чистый и поддерживаемый код: практичные гайды, подборки сниппетов, разбор современных фич (C# 12, .NET 10, атрибуты, паттерны), плюс статьи для прокачки от уровня новичка до мидла.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥5👍4
Как упростить работу с индексами и подстроками?
Классический подход — вечные
Чем больше таких мест, тем больше “магических чисел” и арифметики над
С индексами (
Здесь
🔥 Итог: меньше
➡️ C# Ready | #совет
Классический подход — вечные
Substring и ручные вычисления длины. В итоге получаем выражения, которые трудно читать и легко сломать:var lastChar = input[input.Length - 1];
var withoutLast = input.Substring(0, input.Length - 1);
Чем больше таких мест, тем больше “магических чисел” и арифметики над
Length, особенно при работе с расширениями файлов, префиксами и хвостами строк.С индексами (
^) и диапазонами (..) в C# можно писать это намного компактнее и ближе к тому, как мы думаем о строке:var lastChar = input[^1]; // последний символ
var withoutLast = input[..^1]; // всё, кроме последнего
Здесь
^1 — “первый элемент с конца”, [..^1] — “с начала до элемента перед последним”. Для хвостов и расширений тоже получается читаемое правило: [^3..] — последние три символа, [..^4] — всё, кроме последних четырёх.Substring, меньше ручных Length - 1, код читается как работа с отрезками строки, а не как арифметика с индексами.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥8👍6