TryGetNonEnumeratedCountОн опредяет количество элементов в последовательности без необходимости принудительной итерации по ней.
Особенно полезно для
IQueryable, когда при вызове метода Count вы не хотите выполнять полный запрос.#csharp #dotnet #tip by Oleg Kyrylchuk
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍39🔥12🥰2
  [MemberNotNullWhen] помогает компилятору указать, при каких условиях указанное поле или свойство не имеет значения NULL, что улучшает статический анализ кода.#csharp #tip by Łukasz Żabski
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍55
  ✅ Как
FirstOrDefault, так и Find используются для поиска первого элемента в коллекции, удовлетворяющего определенному условию.🚀 Find: потенциально может быть быстрее для коллекций в памяти (например,
List<T>), поскольку потенциально может использовать прямое индексирование для поиска элемента.💡 Это относится к следующим типам коллекций:
List, Array, ImmutableList.#tip #csharp #dotnet by Jalal Alzebda
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍32❤11🥱4😁3👾2
  🔥 UUID v7 в .NET 9
.NET изначально поддерживает UUID v4 через
📌 UUID v7
Так как
Основным преимуществом является включение метки времени в UUID. Это дает 122 бита энтропии, включая 6 бит для версии и варианта где-то посередине.
Главное преимущество заключается в том, что вы можете сортировать UUID по времени их создания, что делает их более подходящими для баз данных по сравнению с UUID v4.
📌 Контроль метки времени
Поскольку метод ожидает
#csharp #dotnet #tip by
Steven Giesel
.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
👍45🔥6
  🤔6❤🔥4🔥3
  💡 Начиная с C# 7 мы можем использовать символ _ для улучшения читаемости числовых литералов. Это особенно полезно для больших чисел и предназначено только для читаемости. 
#dotnet #csharp #tip by Dave Callan
#dotnet #csharp #tip by Dave Callan
👍56🥱20🔥3👏2
  #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
  👍30🔥6
  🛠️ Пример параметризованного теста xUnit
Вместо того, чтобы добавлять множество различных тестовых методов с разными входными данными, заданными в теле метода, мы создаем один метод, передаем в него входные данные и ожидаемые результаты для каждого теста в виде параметров.
Это означает меньшее количество тестовых методов (что упрощает изменение логики тестов) и возможность быстро увидеть все входные данные и ожидаемые результаты для конкретного метода вместе.
В примере используется атрибут
#dotnet #csharp #tip by Dave Callan
Вместо того, чтобы добавлять множество различных тестовых методов с разными входными данными, заданными в теле метода, мы создаем один метод, передаем в него входные данные и ожидаемые результаты для каждого теста в виде параметров.
Это означает меньшее количество тестовых методов (что упрощает изменение логики тестов) и возможность быстро увидеть все входные данные и ожидаемые результаты для конкретного метода вместе.
В примере используется атрибут
[ClassData], который загружает тестовые данные из отдельного класса, реализующего IEnumerable<object[]>.#dotnet #csharp #tip by Dave Callan
🥱15👍8❤4🔥4
  🛠️ Пример модульного теста C# с использованием паттерна Builder
💬 Кто использует паттерн Builder для настройки тестовых данных? В каких ситуациях оправданы дополнительные накладные расходы на обслуживание?
#dotnet #csharp #tip by Dave Callan
💬 Кто использует паттерн Builder для настройки тестовых данных? В каких ситуациях оправданы дополнительные накладные расходы на обслуживание?
#dotnet #csharp #tip by Dave Callan
🥰19👍6🤩3🥱3🤔1
  Он был представлен в C# 11. Видимость созданного типа ограничена исходным файлом, в котором он объявлен.
Эта фича помогает избегать конфликтов имен при написании генераторов исходного кода.
💬 Как думаете, в каких кейсах его еще можно применить?
#dotnet #csharp #tip by Oleg Kyrylchuk
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍35😁5
  🔼 Spread element в C# 12: простой пример 
Идея похожа на
💬 Уже пользовались?
#dotnet #csharp #tip by Dave Callan
Идея похожа на
... ( три точки) в JavaScript и используется для объединения коллекций.💬 Уже пользовались?
#dotnet #csharp #tip by Dave Callan
🔥38👍13🌚5😢1🎉1
  Начиная с версии 17.12 Preview 2, больше не нужно явно повторять значения, которые используются в разных окружениях.
#dotnet #csharp #tip by Dave Callan
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🎉12👍5❤3🥰1
  Проблема заключалась в том, что обработчик исключений по умолчанию всегда устанавливал 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
  🔥23👍12❤2🌚1
  #dotnet #csharp #tip by Dave Callan
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍8