ar
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

الذهاب إلى القناة على Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Библиотека шарписта | C#, F#, .NET, ASP.NET

تُعد قناة Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 21 701 مشتركاً، محتلاً المرتبة 5 932 في فئة التكنولوجيات والتطبيقات والمرتبة 30 116 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 21 701 مشتركاً.

بحسب آخر البيانات بتاريخ 14 سبتمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -21، وفي آخر 24 ساعة بمقدار 3، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 18.75‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 8.20‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 4 069 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 779 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 16.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل .net, шарписта, навигация, await, string.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 15 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

21 701
المشتركون
+324 ساعات
+107 أيام
-2130 أيام

جاري تحميل البيانات...

جذب المشتركين
سبتمبر '26
سبتمبر '26
+74
في 0 قنوات
أغسطس '26
+94
في 1 قنوات
Get PRO
يوليو '26
+110
في 1 قنوات
Get PRO
يونيو '26
+122
في 1 قنوات
Get PRO
مايو '26
+181
في 1 قنوات
Get PRO
أبريل '26
+150
في 0 قنوات
Get PRO
مارس '26
+120
في 0 قنوات
Get PRO
فبراير '26
+169
في 1 قنوات
Get PRO
يناير '26
+184
في 2 قنوات
Get PRO
ديسمبر '25
+126
في 1 قنوات
Get PRO
نوفمبر '25
+166
في 1 قنوات
Get PRO
أكتوبر '25
+163
في 1 قنوات
Get PRO
سبتمبر '25
+140
في 1 قنوات
Get PRO
أغسطس '25
+137
في 4 قنوات
Get PRO
يوليو '25
+144
في 1 قنوات
Get PRO
يونيو '25
+179
في 0 قنوات
Get PRO
مايو '25
+171
في 3 قنوات
Get PRO
أبريل '25
+244
في 15 قنوات
Get PRO
مارس '25
+360
في 52 قنوات
Get PRO
فبراير '25
+325
في 48 قنوات
Get PRO
يناير '25
+264
في 35 قنوات
Get PRO
ديسمبر '24
+348
في 35 قنوات
Get PRO
نوفمبر '24
+325
في 37 قنوات
Get PRO
أكتوبر '24
+338
في 35 قنوات
Get PRO
سبتمبر '24
+324
في 36 قنوات
Get PRO
أغسطس '24
+317
في 35 قنوات
Get PRO
يوليو '24
+335
في 36 قنوات
Get PRO
يونيو '24
+298
في 31 قنوات
Get PRO
مايو '24
+466
في 36 قنوات
Get PRO
أبريل '24
+519
في 38 قنوات
Get PRO
مارس '24
+542
في 31 قنوات
Get PRO
فبراير '24
+587
في 30 قنوات
Get PRO
يناير '24
+674
في 25 قنوات
Get PRO
ديسمبر '23
+785
في 34 قنوات
Get PRO
نوفمبر '23
+439
في 4 قنوات
Get PRO
أكتوبر '23
+606
في 24 قنوات
Get PRO
سبتمبر '23
+812
في 0 قنوات
Get PRO
أغسطس '23
+639
في 0 قنوات
Get PRO
يوليو '23
+573
في 0 قنوات
Get PRO
يونيو '23
+410
في 0 قنوات
Get PRO
مايو '23
+572
في 0 قنوات
Get PRO
أبريل '23
+405
في 0 قنوات
Get PRO
مارس '23
+892
في 0 قنوات
Get PRO
فبراير '23
+365
في 0 قنوات
Get PRO
يناير '23
+407
في 0 قنوات
Get PRO
ديسمبر '22
+409
في 0 قنوات
Get PRO
نوفمبر '22
+571
في 0 قنوات
Get PRO
أكتوبر '22
+356
في 0 قنوات
Get PRO
سبتمبر '22
+398
في 0 قنوات
Get PRO
أغسطس '22
+503
في 0 قنوات
Get PRO
يوليو '22
+541
في 0 قنوات
Get PRO
يونيو '22
+584
في 0 قنوات
Get PRO
مايو '22
+290
في 0 قنوات
Get PRO
أبريل '22
+339
في 0 قنوات
Get PRO
مارس '22
+451
في 0 قنوات
Get PRO
فبراير '22
+233
في 0 قنوات
Get PRO
يناير '22
+308
في 0 قنوات
Get PRO
ديسمبر '21
+356
في 0 قنوات
Get PRO
نوفمبر '21
+359
في 0 قنوات
Get PRO
أكتوبر '21
+405
في 0 قنوات
Get PRO
سبتمبر '21
+398
في 0 قنوات
Get PRO
أغسطس '21
+400
في 0 قنوات
Get PRO
يوليو '21
+397
في 0 قنوات
Get PRO
يونيو '21
+311
في 0 قنوات
Get PRO
مايو '21
+479
في 0 قنوات
Get PRO
أبريل '21
+480
في 0 قنوات
Get PRO
مارس '21
+487
في 0 قنوات
Get PRO
فبراير '21
+521
في 0 قنوات
Get PRO
يناير '21
+374
في 0 قنوات
Get PRO
ديسمبر '20
+11 455
في 0 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
15 سبتمبر+6
14 سبتمبر+6
13 سبتمبر+5
12 سبتمبر0
11 سبتمبر+5
10 سبتمبر+10
09 سبتمبر+8
08 سبتمبر+8
07 سبتمبر+4
06 سبتمبر+4
05 سبتمبر+1
04 سبتمبر+3
03 سبتمبر+2
02 سبتمبر+7
01 سبتمبر+5
منشورات القناة
🧑‍💻 Забытый await: от race condition до DoS-атаки В C# ключевое слово async — это инструкция компилятору превратить метод в state machine. await отмечает точку логической приостановки. Всё просто: выполнение не должно продолжаться, пока результат не существует. При await весь код выполняется синхронно, пока не достигнет I/O или функции, возвращающей Task. Если Task не завершён, происходит раскрутка кадра стека, и поскольку обрамляющие методы приостановлены до самого верха, поток может быть освобождён в пул потоков. Позже задача завершается, продолжение планируется и выполнение возобновляется там, где остановилось. Это не параллельное выполнение, это приостановка и возобновление. Если забыли await:

var task = GetDataAsync();
// забыли await
Use(task);
Это режим «запустил и забыл» (fire-and-forget). Последствия: • выполнение продолжается немедленно • зависимость не обеспечивается • исключения выходят за пределы логического стека вызовов Что может произойти с приложением ⚠️ Забытый await может привести к классическому состоянию гонки: код продолжает выполнение до завершения критической операции, например, проверки прав доступа, открывая окно для эксплуатации. Атакующий может успеть получить доступ к данным между моментом начала проверки и её завершением. ⚠️ Когда исключения выходят за пределы логического стека вызовов, они могут быть проглочены без логирования. Это маскирует неудачные попытки аутентификации, SQL-инъекции или другие атаки. ⚠️ Истощение пула потоков как вектор DoS-атаки. При высокой нагрузке неправильное использование async/await приводит к истощению пула потоков. Злоумышленник может намеренно генерировать запросы, эксплуатирующие блокирующие операции. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

2
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потер
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 18 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠
1 664
3
🧩 Union types появились в ASP.NET Core на .NET 11 В C# 15 можно описать тип с несколькими допустимыми вариантами: public union IntOrString(int, string); Такой endpoint может вернуть либо число, либо строку: app.MapGet("/max-unavailable", () => new IntOrString(2)); JSON останется обычным: 2 или: "25%" Без $type и дополнительных обёрток. Главный плюс — компилятор проверяет, что switch обработал все варианты union. Поддерживается в Minimal APIs, MVC, SignalR, Blazor и OpenAPI. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #async_news
2 058
4
🔍Тестовое собеседование с Senior C# разработчиком уже завтра 15 сентября (уже завтра!) в 19:00 по МСК приходи онлайн на откр
🔍Тестовое собеседование с Senior C# разработчиком уже завтра 15 сентября (уже завтра!) в 19:00 по МСК приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle C# разработчика. Как это будет: 📂 Александр Моргунов, старший C# разработчик с опытом 7+ лет в Европейских высоконагруженных сервисах, будет задавать реальные вопросы и задачи разработчику-добровольцу; 📂 Александр будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью; 📂 В конце можно будет задать любой вопрос Александру. Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot Реклама. О рекламодателе.
2 096
5
С днем программиста, коллеги! Желаем, чтобы код компилировался с первого раза, баги находились до релиза, а таски «на пять ми
С днем программиста, коллеги! Желаем, чтобы код компилировался с первого раза, баги находились до релиза, а таски «на пять минут» действительно занимали пять минут.  И конечно, пусть в жизни будет больше приятных сюрпризов — один из них мы уже подготовили. Скорее переходите по ссылке, трясите коробку и забирайте свой подарок ко Дню программиста: https://tprg.ru/YtJ2
2 297
6
🧠 When и Unless для умных проверок В FluentValidation условная валидация запускает правила только при нужных условиях. When и Unless экономят циклы и делают валидаторы читаемыми. • When = «проверить, если условие верно» • Unless = «проверить, если условие НЕ верно» Пример: RuleFor(x => x.ShippingAddress) .NotEmpty() .When(x => x.DeliveryMethod == "Express"); RuleFor(x => x.CreditCard) .NotEmpty() .Unless(x => x.PaymentMethod == "PayPal"); When проверяет условие перед правилом. Express доставка требует адрес, PayPal не требует карту. Логика в одном месте без if-else в контроллере. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
2 332
7
🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy вырастут на 20% 👀 Так что если курс да
🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy вырастут на 20% 👀 Так что если курс давно ждёт своего часа — лучше не откладывать ещё на месяц 😏 📍 Выбрать курс
2 172
8
📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
2 241
9
🌞 Готовим вебинар про AI в разработке и хотим сделать его максимально полезным Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить? 🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь. Задавайте всё, что давно хотелось спросить 📍 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта
2 181
10
Команды ждут тебя на треке программирование роботов на МТС True Tech Champ 2026 — всероссийском чемпионате по программировани
Команды ждут тебя на треке программирование роботов на МТС True Tech Champ 2026  — всероссийском чемпионате по программированию с двумя треками и призовым фондом 10 250 000 рублей. Успей зарегистрироваться до 13 сентября. В треке программирования роботов тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий сначала в онлайн-симуляторе, а затем на офлайн-полигоне в финале 22 октября. Рекомендуемые стеки: Go, Java, Python, C#, C++, JS. Участие в командах 2-5 человек. Если у тебя нет своей команды, кураторы помогут объединиться с другими участниками на платформе. Масштабный финал объединит борьбу за призовой фонд 10 250 000 рублей, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия. Успей зарегистрироваться и пройти квалификацию до 13 сентября. erid:2VSb5xEgRdt
2 482
11
✏️ Async/Await в C# — шпаргалка ➡️ Что такое Task Task — это обещание, что какое-то событие произойдёт в будущем. Не результат, а именно обещание. Task<T> — то же самое, но с результатом типа T. Когда задача завершится, значение станет доступно. Задача считается завершённой, когда событие произошло или значение получено. Проверить это можно через IsCompleted или Status. ➡️ Как дождаться результата Правильно — асинхронно: • await task — отпускает поток, пока задача не завершится. Поток свободен, приложение не зависает. • ContinueWith(action) — задача сама вызовет ваш колбэк, когда завершится. Полезно, если нужно выстроить цепочку без await. Неправильно — синхронно: • task.Wait() и task.Result блокируют текущий поток до завершения задачи. Это неэффективно, ведь поток простаивает и опасно: риск дедлока в UI и ASP.NET-контекстах. Единственное исключение: вызывать Wait или Result на уже завершённой задаче безопасно и дёшево — результат уже есть, блокировки не будет. ➡️ Что делает async async — это флаг для компилятора: «в этом методе может встретиться await, подготовь конечный автомат». Не более того. async без await внутри — бессмысленный метод. Он выполнится полностью синхронно, а компилятор при этом сгенерирует тяжёлый шаблонный код конечного автомата впустую. async не запускает код в фоновом потоке. Если нужен фоновый поток — используйте Task.Run. ➡️ Что делает await await — точка, в которой метод «разрезается» на до и после. Если задача ещё не завершена, управление возвращается вызывающему коду. Когда задача завершится — выполнение продолжится с того же места. Без await ключевое слово async ничего не делает. ➡️ Частые ошибки Вызов .Result или .Wait() в UI-потоке — дедлок. UI-поток заблокирован ожиданием, а задача не может завершиться, потому что ей нужен тот же UI-поток. async void — допустим только для обработчиков событий. В остальных случаях используйте async Task. Исключения из async void невозможно поймать извне. Забыли await — задача запустится, но никто не дождётся её завершения. Ошибки внутри неё потеряются молча. async без await — компилятор предупредит, и правильно сделает. Метод синхронный, а обёртка в Task создаёт ложные ожидания у вызывающего кода. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
2 695
12
🚀 .NET 11 вышел в Release Candidate 1 8 сентября Microsoft выпустила первый RC .NET 11. У него уже есть Go-Live Support, поэ
🚀 .NET 11 вышел в Release Candidate 1 8 сентября Microsoft выпустила первый RC .NET 11. У него уже есть Go-Live Support, поэтому сборку можно использовать в production — хотя для критичных систем разумнее дождаться финального релиза. Что главное: → C# 15 стал default для .NET 11 — union types и closed hierarchies больше не preview; → runtime получил новые возможности для диагностики и оптимизации, включая crash reporting на Unix и аппаратное ускорение System.Half; → обновились SDK, MSBuild, NuGet, ASP.NET Core, MAUI и WinForms. 🌞 Финальный .NET 11 запланирован на 10 ноября и будет STS-релизом. А 10 ноября заканчивается поддержка .NET 8 и .NET 9. Для них уже вышли сентябрьские security updates: 8.0.31, 9.0.20 и 10.0.12. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #async_news
3 028
13
💥 Куда исчезает метод после JIT-компиляции? В C# мы пишем: int Double(int x) => x * 2; var result = Double(21); Но JIT может решить, что отдельный вызов здесь вообще не нужен. При inlining тело метода встраивается непосредственно в вызывающий код: 🔴 До: call Double ↓ x * 2 🔴 После: 21 * 2 Зачем? Меньше накладных расходов на вызов метода, а главное — JIT получает больше кода для последующих оптимизаций. Но inline не означает «метод маленький → обязательно встроить». JIT учитывает размер метода, частоту вызовов, доступность кода для анализа и другие эвристики. Поэтому даже небольшой метод может не попасть в inline. 📍 А атрибут: [MethodImpl(MethodImplOptions.AggressiveInlining)] — это подсказка JIT, а не приказ. И наоборот, иногда большой метод всё-таки может быть встроен, если JIT считает это выгодным. Вот почему производительность C# нельзя оценивать только по исходному коду: между C# и CPU есть ещё один слой — JIT и его оптимизатор. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #il_люминатор
2 938
14
🧪 MSTest 4.4 теперь поддерживает Native AOT Тесты тоже должны проверять то, что мы отправляем в production. Native AOT означает trimming, ограничения reflection и отсутствие runtime code generation. Обычный managed-тест может этого не показать. В MSTest 4.4 появился source generation для тестов — test discovery и запуск можно выполнять без зависимости от runtime reflection. <PublishAot>true</PublishAot> В итоге можно прогнать тесты в тех же AOT-условиях, в которых будет работать приложение. Особенно полезно для проектов, где Native AOT — часть production-сборки. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #async_news
3 354
15
💡 FrozenDictionary. Когда словарь больше не должен меняться Если коллекция после создания больше не изменяется, обычный Dictionary<TKey, TValue> не всегда лучший вариант. В .NET 8 появились FrozenDictionary и FrozenSet — специализированные неизменяемые коллекции для сценариев, где данные сначала собираются, а потом много раз читаются. var users = new Dictionary<int, string> { [1] = "Ada", [2] = "Linus", [3] = "Grace" }; var frozenUsers = users.ToFrozenDictionary(); После создания frozenUsers нельзя изменить. Зато структура оптимизируется именно под быстрый поиск. 🟡 Хороший сценарий — конфигурация, справочники, таблицы маршрутизации или наборы разрешений, которые загружаются один раз и затем используются тысячи раз. FrozenDictionary не означает «быстрее любого Dictionary». Создание такой коллекции дороже, поэтому выигрыш появляется именно там, где чтений много, а изменений нет. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
3 420
16
👨‍💻 string в C# — не просто текст string — это ссылочный тип с особой поддержкой рантайма. Внутри он хранит непрерывный бло
👨‍💻 string в C# — не просто текст string — это ссылочный тип с особой поддержкой рантайма. Внутри он хранит непрерывный блок UTF-16 кодовых единиц. Отсюда первый сюрприз: string s = "😊"; Console.WriteLine(s.Length); // 2, не 1 Length считает не символы, а UTF-16 кодовые единицы. Эмодзи и многие Unicode-символы занимают две единицы — суррогатную пару. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #sharp_view
4 142
17
⚙️ nameof теперь понимает несвязанные обобщения Удобство и гибкость метапрограммирования — теперь nameof работает для обобщений без аргументов. Благодаря новой поддержке можно получить имена обобщенных типов без указания параметров: Console.WriteLine(nameof(List<>)); // Выведет "List" 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
4 144
18
🗂 Работа и пет-проекты с одного ПК Работаете днём в корпоративном репо, вечером в личном на GitHub. Один ПК, но email и ключи подписи разные. Ручная смена настроек Git каждый раз бесит и приводит к косякам с коммитами. Условные includeIf решают всё Добавьте в ~/.gitconfig пару строк. Git сам подхватит нужный конфиг по пути к папке или remote URL. Для рабочих папок загрузит корпоративный email: [includeIf "gitdir:~/work/"] path = .gitconfig-corp Личные репозитории получат ваш домашний email автоматически: [includeIf "hasconfig:remote.*.url:https://github.com/вашеимя/**"] path = .gitconfig-personal Забудьте про git config --global user.email каждый раз. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
4 150
19
💥 Azure Functions: Linux Consumption уходит, на смену приходит Flex Microsoft постепенно закрывает старый Linux Consumption
💥 Azure Functions: Linux Consumption уходит, на смену приходит Flex Microsoft постепенно закрывает старый Linux Consumption Plan для Azure Functions. Его поддержка завершится 30 сентября 2028 года, а новые функции и версии языков для него уже не развиваются. Для новых serverless-приложений Microsoft рекомендует Flex Consumption. 🔘 Что меняется для .NET-разработчиков: — Flex работает с .NET 8, 9 и 10 в isolated-модели; — функции масштабируются независимо друг от друга; — можно настраивать память инстанса; — появилась интеграция с VNet; — есть Always Ready-инстансы для снижения cold start; — деплой идёт через blob storage, а не старый zip-deploy. 📍 Переключить существующий Linux Consumption App на Flex «на месте» нельзя. Нужно создать новое Function App в Flex, перенести конфигурацию и задеплоить код. Для миграции Microsoft уже предлагает отдельный CLI: az functionapp flex-migration start Он создаёт Flex-приложение на основе существующего Linux Consumption App. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #async_news
4 138
20
⚡️ C# 15 убирает флаг из вложенных циклов Раньше для выхода сразу из нескольких foreach часто приходилось заводить переменную: bool found = false; foreach (var warehouse in warehouses) { foreach (var bin in warehouse.Bins) { if (bin.Sku == requestedSku) { found = true; break; } } if (found) break; } 🤩 В C# 15 можно обозначить внешний цикл и выйти из него напрямую: scan: foreach (var warehouse in warehouses) { foreach (var bin in warehouse.Bins) { if (bin.Sku == requestedSku) break scan; } } Никаких found, дополнительного if и лишнего состояния. C# 15 сейчас доступен в .NET 11 Preview 7. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
4 451