Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Показати більше📈 Аналітичний огляд Telegram-каналу Библиотека шарписта | C#, F#, .NET, ASP.NET
Канал Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 21 521 підписників, посідаючи 6 159 місце в категорії Технології та додатки та 30 442 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 21 521 підписників.
За останніми даними від 31 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -126, а за останні 24 години на -9, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 15.65%. Протягом перших 24 годин після публікації контент зазвичай збирає 7.69% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 3 367 переглядів. Протягом першої доби публікація в середньому набирає 1 656 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 4.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, шарписта, навигация, await, string.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Завдяки високій частоті оновлень (останні дані отримано 01 листопада, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
DeepClone().
— Пример:
using FastCloner;
var original = new Person {
Name = "Alice",
Address = new Address { City = "Berlin" }
};
var clone = original.DeepClone();
clone.Address.City = "Paris";
// original.Address.City всё ещё "Berlin"
— Как подключить
dotnet add package FastClonerС этой либой объект «просто скопируется» и не начнёт вести себя как капризный клон в sci-fi фильме. ➡️ Посмотреть репозиторий проекта 🐸Библиотека шарписта #буст
public class AVLNode
{
public int Key;
public AVLNode Left, Right;
public int Height;
public AVLNode(int key)
{
Key = key;
Height = 1;
}
}
public class AVLTree
{
private AVLNode root;
int Height(AVLNode node) => node?.Height ?? 0;
int BalanceFactor(AVLNode node) => Height(node.Left) - Height(node.Right);
AVLNode RightRotate(AVLNode y)
{
var x = y.Left;
var T2 = x.Right;
x.Right = y;
y.Left = T2;
y.Height = Math.Max(Height(y.Left), Height(y.Right)) + 1;
x.Height = Math.Max(Height(x.Left), Height(x.Right)) + 1;
return x;
}
AVLNode LeftRotate(AVLNode x)
{
var y = x.Right;
var T2 = y.Left;
y.Left = x;
x.Right = T2;
x.Height = Math.Max(Height(x.Left), Height(x.Right)) + 1;
y.Height = Math.Max(Height(y.Left), Height(y.Right)) + 1;
return y;
}
public AVLNode Insert(AVLNode node, int key)
{
if (node == null)
return new AVLNode(key);
if (key < node.Key)
node.Left = Insert(node.Left, key);
else if (key > node.Key)
node.Right = Insert(node.Right, key);
else
return node;
node.Height = 1 + Math.Max(Height(node.Left), Height(node.Right));
int balance = BalanceFactor(node);
if (balance > 1 && key < node.Left.Key)
return RightRotate(node);
if (balance < -1 && key > node.Right.Key)
return LeftRotate(node);
if (balance > 1 && key > node.Left.Key)
{
node.Left = LeftRotate(node.Left);
return RightRotate(node);
}
if (balance < -1 && key < node.Right.Key)
{
node.Right = RightRotate(node.Right);
return LeftRotate(node);
}
return node;
}
}
Преимущества:
— Обеспечение сбалансированного дерева с высотой O(log n)
— Быстрый поиск и обновление данных
— Подходит для систем, требующих высокопроизводительных операций поиска
➡️ Лучшее из мира IT-книг — у нас в @progbookdotnet run, и всё работает.
Предлагаем посмотреть видео, где показывают, как эту фичу использовать в автоматизации, генерации данных и даже как поднять mock-сервер — всё из одного файла.
➡️ Смотреть видео
🐸Библиотека шарписта #бустIEnumerable и IQueryable, новички и разработчики постарше могут запутаться. На практике выбор между этими интерфейсами зависит от того, с какими данными вы работаете и какие задачи решаете.
Один из подписчиков недавно спросил:
Когда и почему стоит использовать IEnumerable вместо IQueryable и наоборот?Вот основные моменты, которые помогут вам сделать правильный выбор: —
IEnumerable — это для работы с коллекциями в памяти. Если данные уже загружены, вы работаете с ними в памяти — фильтрация и сортировка происходят прямо там.
— IQueryable же используется, когда данные находятся в базе, и вы строите запросы, которые могут быть преобразованы в SQL-запросы. Это даёт вам «ленивую» загрузку данных и выполнение запросов на уровне базы.
Но есть и подводные камни:
— IQueryable может сгенерировать неэффективные запросы, если не следить за ними.
— IEnumerable для небольших объёмов данных, но если данных много, это может быть не так эффективно.
💬 Когда вы выбираете IEnumerable, а когда отдаёте предпочтение IQueryable? Поделитесь своим опытом в комментариях 👇
🐸Библиотека шарписта #междусобойчик{
// Код, который может вызвать исключение
}
catch (SpecificException ex)
{
// Обработка конкретного исключения
}
2. Обрабатывайте только те исключения, которые вы можете корректно обработать.
3. Логируйте исключения для диагностики
• Записывайте подробную информацию о возникшем исключении: тип ошибки, сообщение, стек вызовов.
• Используйте библиотеки логирования: Serilog, NLog, Log4Net.
catch (Exception ex)
{
logger.Error(ex, "Произошла ошибка");
}
4. Используйте блок finally для выполнения очистки
Блок finally выполняется всегда, независимо от того, возникло исключение или нет. Используйте его для освобождения ресурсов (например, закрытие файлов или соединений).
{
// Ваш код
}
catch (Exception ex)
{
// Обработка ошибки
}
finally
{
// Очистка ресурсов
}
5. Создавайте собственные исключения
При необходимости создавайте свои собственные типы исключений для лучшей организации обработки ошибок.
public class CustomException : Exception
{
public CustomException(string message) : base(message) { }
}
6. Не выбрасывайте исключения с пустыми сообщениями
Если вы выбрасываете исключение, всегда указывайте подробное сообщение, чтобы помочь диагностировать проблему.
throw new ArgumentNullException("parameterName", "Параметр не может быть null");
7. Используйте throw для повторного выбрасывания исключений
В случае, если вы хотите обработать исключение, но также передать его дальше, используйте throw без параметров, чтобы сохранить стек вызовов.
8. Не используйте исключения для обычного потока выполнения
Исключения должны использоваться для неожиданных или критических ошибок. Не используйте их для управления потоком выполнения (например, не используйте try-catch для проверки условий).
9. Используйте AggregateException для обработки нескольких исключений
Если вы работаете с задачами и несколько исключений могут быть выброшены одновременно, используйте AggregateException для их обработки.
{
// Асинхронный код
}
catch (AggregateException ex)
{
foreach (var innerEx in ex.InnerExceptions)
{
// Логирование каждого исключения
}
}
10. Планируйте стратегию обработки ошибок в продакшн-среде
В продакшн-среде важно минимизировать влияние ошибок на пользователя. Рассмотрите возможность использования retry-логики или fallback-методов.
public async Task<T> RetryAsync<T>(Func<Task<T>> action)
{
int retries = 3;
while (retries > 0)
{
try
{
return await action();
}
catch
{
retries--;
if (retries == 0) throw;
}
}
}
Этот чек-лист поможет вам правильно и эффективно обрабатывать ошибки и исключения в C#-проекте.
🐸Библиотека шарписта #бустgit log --graph --oneline --all --decorate
Команда визуализирует сложную историю ветвления и слияния веток.
🐸Библиотека шарписта #буст