Этот скрипт быстро выводит список работающих программ с их полными путями, заметно упрощая контроль системы.
Что важно знать:
• Запуск от администратора;
• Программа не падает;
• Пустой путь возможен.
Используйте этот приём для регулярной проверки компьютера и своевременного поиска и удаления потенциально нежелательных приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤4🔥4🤝1
Как получить текст аргумента без nameof и макросов?
В C# 10 появилась аннотация
Пример: метод
выбросит →
• Упрощает логи, assert’ы и валидацию без
• Работает с любыми типами параметров,
• Удобно для написания guard-методов, fluent API и диагностики.
➡️ C# Ready | #совет
В C# 10 появилась аннотация
CallerArgumentExpression, которая позволяет получить текст исходного выражения аргумента прямо внутри метода.Пример: метод
Check() автоматически подставит выражение, переданное при вызове:Check(user?.Name);
выбросит →
ArgumentNullException: user?.Name• Упрощает логи, assert’ы и валидацию без
nameof и ручных строк,• Работает с любыми типами параметров,
• Удобно для написания guard-методов, fluent API и диагностики.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27🤝6❤5👍3
Внедряем DI в консольном приложении — быстро и компактно!
Когда даже маленькая утилита разрастается, хочется легко подменять реализации для тестов и разных сред. Подключаем DI из Microsoft
Подключаем пакет, описываем контракт и реализацию, настраиваем контейнер:
Сначала объявляем контракт и его реализацию, а затем подключаем DI-контейнер:
Достаём сервис из контейнера и используем его в основной логике приложения:
🔥 Всего пару строк регистрации — и ваше консольное приложение получает гибкость, тестируемость и чистые зависимости.
➡️ C# Ready | #практика
Когда даже маленькая утилита разрастается, хочется легко подменять реализации для тестов и разных сред. Подключаем DI из Microsoft
.Extensions.DependencyInjection — без ASP.NET и лишнего кода.Подключаем пакет, описываем контракт и реализацию, настраиваем контейнер:
using Microsoft.Extensions.DependencyInjection;
interface IGreeter
{
void Greet(string name);
}
class ConsoleGreeter : IGreeter
{
public void Greet(string name) => Console.WriteLine($"👋 Привет, {name}!");
}
Сначала объявляем контракт и его реализацию, а затем подключаем DI-контейнер:
var services = new ServiceCollection()
.AddSingleton<IGreeter, ConsoleGreeter>()
.BuildServiceProvider();
Достаём сервис из контейнера и используем его в основной логике приложения:
var greeter = services.GetRequiredService<IGreeter>();
greeter.Greet("C# Ready");
🔥 Всего пару строк регистрации — и ваше консольное приложение получает гибкость, тестируемость и чистые зависимости.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3🔥3
Блокировка мусорщика даёт предсказуемый отклик, но требует точного расчёта свободной памяти и аккуратного завершения режима.
Что важно знать:
• Запланируй нужный запас;
• Мониторь рост потребления;
• Заверши режим вовремя.
Используй режим без пауз только в критических участках, чтобы убрать задержки и сохранить стабильность системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤6🤝6👍4
Лайфхак для Record Struct!
Знали ли вы, что
Он сочетает преимущества структур (располагаются на стеке) и record-типа (автогенерация
Такой тип можно использовать как ключ в словарях, сравнивать по значению и не бояться боковых эффектов:
А если нужно изменить одно поле, не нарушая иммутабельность — используйте
🔥 Главное — помнить, что
➡️ C# Ready | #практика
Знали ли вы, что
record struct — это не просто короткий способ описать данные, а отличный инструмент для иммутабельных value-типов, которые не создают лишних объектов в куче?Он сочетает преимущества структур (располагаются на стеке) и record-типа (автогенерация
Equals, GetHashCode, ToString):public readonly record struct Point(int X, int Y);
Такой тип можно использовать как ключ в словарях, сравнивать по значению и не бояться боковых эффектов:
var p1 = new Point(10, 20);
var p2 = new Point(10, 20);
Console.WriteLine(p1 == p2); // True
Console.WriteLine(p1); // Point { X = 10, Y = 20 }
А если нужно изменить одно поле, не нарушая иммутабельность — используйте
with:var p3 = p1 with { X = 99 };
Console.WriteLine(p3); // Point { X = 99, Y = 20 }🔥 Главное — помнить, что
record struct копируется по значению, так что большие структуры лучше не передавать по значению слишком часто.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤9👍5
В C# появились логические и реляционные паттерны, которые позволяют писать условия естественно и компактно — без цепочек
if, && и лишних скобок.Первое условие проверяет диапазон значений, второе — одновременно распаковывает объект и фильтрует по свойству.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥6👍5
В C# 9 появились
record-типы с поддержкой value-семантики и ключевым словом with для копирования объектов с изменениями.record автоматически создаёт Equals, ToString и GetHashCode, а with позволяет не мутировать объект, а создавать новую версию на лету. Удобно для DTO, конфигураций, состояний и unit-тестов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4🔥4
Object Pool помогает убрать фризы при частом создании пуль, эффектов и врагов.
Что важно знать:
• Объекты заранее создаются;
• Выключенные сохраняются в памяти;
• Возвращаются вручную в пул.
Такой подход стабилизирует FPS и делает игру плавнее даже на слабых устройствах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝8❤6👎1