Telegram Web
💪 Разминка перед выходными

Есть код:
var dict = new Dictionary<object, string>();

dict[1] = "int";
dict[1L] = "long";
dict[1.0] = "double";

Console.WriteLine(dict.Count);
Console.WriteLine(dict[1 ]);


Что выведет код? Пишите в комменты 👇

Ответь спрячем здесь:
3
int


🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🤔52
⚙️ Проверка на пустоту

Когда нужно проверить строку на пустоту в C# есть два популярных метода:

string.IsNullOrEmpty(str) возвращает true, если строка равна null или имеет длину 0 ("").

string.IsNullOrWhiteSpace(str) идёт дальше: он также учитывает пробелы, табы и переводы строк. То есть " " будет считаться пустой.

Код:
Console.WriteLine(string.IsNullOrEmpty("   ")); // False
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True


Если нужно проверить только на null и пустую строку — используйте IsNullOrEmpty. Если важно исключить строки, состоящие только из пробелов или невидимых символов — выбирайте IsNullOrWhiteSpace.

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱28👍62😁2🥰1
🚀 Cвежие улучшения для реактивного кода

В новой версии Rx.NET 6.1 появилось три ключевых новшества:

• метод DisposeWith для удобной работы с CompositeDisposable

• новый TakeUntil(CancellationToken) для управления бесконечными потоками

• оператор ResetExceptionDispatchState, решающий проблему с растущими стектрейсом при повторных await.

➡️ Подробнее про обнову

🐸 Библиотека шарписта

#asycn_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
✏️ Генерация игнор-файла прямо из CLI

В .NET есть команда создаёт готовый .gitignore, оптимизированный под экосистему.

В нём уже прописаны все типичные исключения: каталоги bin/, obj/, кэш NuGet, файлы публикаций, временные артефакты IDE и прочие служебные данные, которые не должны попадать в репозиторий.

Команда:
dotnet new gitignore


Не нужно искать шаблон на GitHub или копировать его вручную — всё доступно из коробки.

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥83
🚀 Курс «ИИ-агенты для DS-специалистов» уже стартовал

Первый вебинар успешно прошёл, участники уже начали разбираться, как использовать ИИ-агентов в реальных проектах.

Но всё самое интересное только начинается!

🔥 Впереди 4 мощных занятия — с практикой, инсайтами и разбором кейсов от экспертов.

💸 Сейчас действует специальная цена → 69.000 ₽ вместо 79.000 ₽.

Осталось всего 4 места.

Не упустите шанс прокачаться в том, что будет определять будущее индустрии.

👉 Забронировать место на курсе
🥱7
🗞 Дайджест недели

Освежаем в памяти прошедшие дни и готовимся к новой рабочей неделе.

JetBrains просит разработчиков поделиться кодом

Участие добровольное, а конфиденциальность и контроль — в руках пользователя. Новые опции появятся в обновлении 2025.2.4 уже в ближайшие недели.

PostgreSQL 18

ТОП-9 популярных AI-агентов для разработки

Microsoft представили Agent Framework

Rx.NET 6.1

🐸 Библиотека шарписта

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что вас зацепило на неделе

Делитесь в комментах:

• Крутые материалы
• Интересные новости
• Полезные инсайты
• Новые инструменты

Собираем коллективную мудрость 👇

🐸 Библиотека шарписта

#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
🚩 Задача с собеса: контейнер с водой

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

Как действовать:

1. Ставим два указателя: один — на начало, второй — на конец массива.

2. Считаем объем текущего контейнера: ширина между указателями умножается на минимальную из двух высот.

3. Двигаем указатель с меньшей высотой внутрь. Если обе высоты равны — можно сдвигать любой.

4. Запоминаем максимум, повторяем шаги, пока указатели не встретятся.

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

Пример реализации:
public int MaxArea(int[] h)
{
int l = 0, r = h.Length - 1, m = 0;
while (l < r)
{
m = Math.Max(m, (r - l) * Math.Min(h[l], h[r]));
if (h[l] < h[r]) l++; else r--;
}
return m;
}


➡️ Попробовать на литкоде

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
⚙️ Под капотом async/await

Когда вы пишете асинхронный метод вроде:
async Task<int> GetDataAsync()
{
var data = await FetchAsync();
return data.Length;
}


вы можете думать, что это «всего лишь ожидание задачи». Но на самом деле компилятор C# превращает этот метод в state machine — конечный автомат, который управляет переходами между состояниями выполнения.

State machine — это структура, которая:

• хранит текущее состояние выполнения программы, например, до await, после await или завершено,

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

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

Что делает компилятор

При компиляции метода с await создаётся вспомогательный класс, реализующий интерфейс IAsyncStateMachine.

Если упростить, то наш пример превращается примерно в:
private struct GetDataAsyncStateMachine : IAsyncStateMachine
{
public int _state;
public AsyncTaskMethodBuilder<int> _builder;
private TaskAwaiter<string> _awaiter;

public void MoveNext()
{
try
{
if (_state == 0)
{
// после await
var result = _awaiter.GetResult();
_builder.SetResult(result.Length);
return;
}

var task = FetchAsync();
if (!task.IsCompleted)
{
_state = 0;
_awaiter = task.GetAwaiter();
_builder.AwaitUnsafeOnCompleted(ref _awaiter, ref this);
return;
}

_builder.SetResult(task.Result.Length);
}
catch (Exception ex)
{
_builder.SetException(ex);
}
}

public void SetStateMachine(IAsyncStateMachine stateMachine) { }
}


Другие примеры использования state machines в C#

• yield return — генерация итераторов IEnumerator

• foreach на async коллекциях — асинхронные итераторы IAsyncEnumerable

Каждый await или yield превращает метод в "автомат", который сам управляет своим ходом выполнения.

🐸 Библиотека шарписта

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱74
🛠 Ловите ошибку сразу

Ничто не портит день разработчика так, как внезапный NullReferenceException в проде.
Лучше упасть сразу — с понятным сообщением, чем потом искать, где всё пошло не так.

Как избежать ошибки:
_ = arg ?? throw new ArgumentNullException(nameof(arg));


Это fail-fast подход: программа ломается там, где ошибка реально возникла, а не через пять вызовов.
Полезно для входных параметров, обязательных зависимостей и DTO, пришедших из вне.

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9👍6
⭐️ Два пункта вниз

C# потерял сразу две позиции в рейтинге PYPL. Его доля снизилась примерно на -2.5 % поисковых запросов.

🐸 Библиотека шарписта

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
😁26😢20👍2🙏2🌚1
🎓 Как вайб-кодинг меняет рынок IT-образования

За последние годы подход к обучению программированию меняется быстрее, чем сами языки. На смену долгим упражнениям с синтаксисом приходит работа с идеями и концепциями, где код во многом генерируется автоматически.

Этот сдвиг называют «вайб-кодингом». Он уже влияет на университетские программы, онлайн-курсы и требования к выпускникам.

➡️ В статье о том, что стоит за этим термином и как он меняет обучение IT-специалистов.

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
😢63👍2
💥 Весь октябрь -40% на курсы для разработчиков в proglib.academy

Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.

Пока одни ждут «идеальный момент», другие просто учатся.
А потом берут ваши офферы.


⚡️ Пока скидка действует, апдейтни свои навыки
👀 Баг или фича

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

Теперь разбираемся, это недоработка или новая фича, мотивирующая авторизацию 🙂

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
⌛️ Таймаут в одну строку

Когда нужно ограничить время ожидания ответа от HTTP-запроса можно использовать метод WaitAsync для установки таймаута без необходимости создавать отдельные токены отмены.

Пример:
var response = await http.GetAsync(url).WaitAsync(TimeSpan.FromSeconds(5));


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

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🤔3🙏1
😂 Почему Console.ReadLine() не работает в браузере

Вы когда-нибудь пытались использовать метод Console.ReadLine() в онлайн-компиляторе C#? Да, звучит как извращение, но давайте углубимся в проблему.

Метод Console.ReadLine() позволяет вашему приложению ожидать ввода пользователя в консоли — это основной инструмент для взаимодействия с пользователем в командной строке.

Но когда вы пытаетесь использовать этот метод в браузерной среде, появляется проблема: браузеры просто не поддерживают работу с консолью напрямую. Атрибут [System.Runtime.Versioning.UnsupportedOSPlatform("browser")] прямо в документации говорит: «Не поддерживайте это в браузере!»

Браузер — это отличное место для быстрых экспериментов, но когда речь идет о полноценной разработке, лучше использовать локальные инструменты: Visual Studio или Visual Studio Code.

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
😢186🥱2😁1
👀 Показываем взаимодействие окружений в Git

🐸 Библиотека шарписта

#схема
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥32
2025/10/16 23:12:48
Back to Top
HTML Embed Code: