Библиотека шарписта | C#, F#, .NET, ASP.NET
23.3K subscribers
2.11K photos
32 videos
85 files
4.28K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
💡 Егор Богатов советует поэкспериментировать с атрибутом NoOptimization для повышения производительности 🤷‍♂️

👉 Подробнее

#dotnet #csharp #perfomance #tip
💡 Визуализация основных методов List в C#

#csharp #tip by Jalal Alzebda
💡 Использование Find вместо FirstOrDefault с коллекциями

Как FirstOrDefault, так и Find используются для поиска первого элемента в коллекции, удовлетворяющего определенному условию.

🚀 Find: потенциально может быть быстрее для коллекций в памяти (например, List<T>), поскольку потенциально может использовать прямое индексирование для поиска элемента.

💡 Это относится к следующим типам коллекций: List, Array, ImmutableList.

#tip #csharp #dotnet by Jalal Alzebda
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 UUID v7 в .NET 9

.NET изначально поддерживает UUID v4 через Guid.NewGuid(). Но начиная с предварительной версии 7, появилась поддержка UUID версии 7.

📌 UUID v7

Так как GUID является альтернативным названием для UUID, новый API находится в пространстве имен System.Guid:

var guid = Guid.CreateVersion7();
var guidWithTimestamp = Guid.CreateVersion7(DateTimeOffset.UtcNow);


Основным преимуществом является включение метки времени в UUID. Это дает 122 бита энтропии, включая 6 бит для версии и варианта где-то посередине.

Главное преимущество заключается в том, что вы можете сортировать UUID по времени их создания, что делает их более подходящими для баз данных по сравнению с UUID v4.

📌 Контроль метки времени

Поскольку метод ожидает DateTimeOffset, вызывающая функция может использовать TimeProvider для контроля UtcNow:

var uuid = Guid.CreateVersion7(timeProvider.GetUtcNow());


timeProvider
может быть получен через DI контейнер и подделан в тестовых сценариях.

#csharp #dotnet #tip by
Steven Giesel
💡Использование JsonSchemaExporter для экспорта схемы JSON в .NET 9: на заметку C#-разработчику

#dotnet #csharp
💡 Начиная с C# 7 мы можем использовать символ _ для улучшения читаемости числовых литералов. Это особенно полезно для больших чисел и предназначено только для читаемости.

#dotnet #csharp #tip by Dave Callan
💡C#-разработчики, знаете ли вы, что при регистрации исключений можно удалить полные пути к файлам? Выше представлено два рабочих кейса.

#csharp #dotnet #tip by Karen Payne
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠️ Пример параметризованного теста xUnit

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

Это означает меньшее количество тестовых методов (что упрощает изменение логики тестов) и возможность быстро увидеть все входные данные и ожидаемые результаты для конкретного метода вместе.

В примере используется атрибут [ClassData], который загружает тестовые данные из отдельного класса, реализующего IEnumerable<object[]>.

#dotnet #csharp #tip by Dave Callan
🛠️ Пример модульного теста C# с использованием паттерна Builder

💬 Кто использует паттерн Builder для настройки тестовых данных? В каких ситуациях оправданы дополнительные накладные расходы на обслуживание?

#dotnet #csharp #tip by Dave Callan
💡Модификатор доступа к файлу в C#

Он был представлен в C# 11. Видимость созданного типа ограничена исходным файлом, в котором он объявлен.

Эта фича помогает избегать конфликтов имен при написании генераторов исходного кода.

💬 Как думаете, в каких кейсах его еще можно применить?

#dotnet #csharp #tip by Oleg Kyrylchuk
Please open Telegram to view this post
VIEW IN TELEGRAM
🔼 Spread element в C# 12: простой пример

Идея похожа на ... ( три точки) в JavaScript и используется для объединения коллекций.

💬 Уже пользовались?

#dotnet #csharp #tip by Dave Callan
👩‍💻 «Шарьте» значения между окружениями с помощью http-файлов в Visual Studio

Начиная с версии 17.12 Preview 2, больше не нужно явно повторять значения, которые используются в разных окружениях.

#dotnet #csharp #tip by Dave Callan
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 В ASP NET Core 8 появился IExceptionHandler

Проблема заключалась в том, что обработчик исключений по умолчанию всегда устанавливал HTTP-код состояния ответа равным 500.

В ASP NET Core 9 представлена ​​новая опция StatusCodeSelector, которая позволяет выбирать код состояния на основе исключения.

👉 Подробнее

#dotnet #csharp #tip by Oleg Kyrylchuk
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Совместное использование настроек сборки в нескольких .NET-проектах: на заметку C#-разработчику

#dotnet #csharp #tip by Dave Callan
Please open Telegram to view this post
VIEW IN TELEGRAM
🥳 Новый формат .NET-решения .slnx теперь доступен в последней превью-версии Rider

Этот формат находится в режиме превью в Visual Studio, а теперь еще и в Rider. Кажется, с новым форматом улучшена читаемость и возможность слияния (mergeability). Выше — пример различий по сравнению с существующим форматом для простого решения.

#dotnet #csharp #tip by Dave Callan
🤔FluentValidation: прекратите проверять правила при первой ошибке

По умолчанию он проверяет все правила и объединяет сообщения об ошибках. Более эффективно устанавливать CascadeMode либо на уровне класса, либо на уровне цепочки правил, особенно при использовании MustAsync и асинхронных операций.

#dotnet #csharp #tip by Saeed Esmaeelinejad
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как можно аннотировать основной конструктор атрибутом?

Ранее, если у записи/класса/структуры было несколько конструкторов, возникала проблема с десериализацией, так как необходимо было указать атрибут JsonConstructor в основном конструкторе.

Начиная с C# 12, можно использовать method attribute target для указания конструктора☝️

#dotnet #csharp #tip by Oleg Kyrylchuk
💡 Parameter Object Pattern

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

Очень полезно, когда группа параметров часто используется повторно.

#dotnet #csharp #tip by Dave Callan
🤔 Согласитесь, что глубоко вложенный код трудно читать?

В методах с большим количеством вложений можно использовать подход Early Return и Guard Clause, чтобы сделать код более удобным для чтения.

#dotnet #csharp #tip by Dave Callan
🚀 Сравнение производительности конкатенации строк в .NET 9

Есть и другие подходы, когда нам нужна ещё более высокая производительность, но из распространённых подходов, показанных ниже, StringJoin выигрывает.

#dotnet #csharp #tip by Dave Callan