Как стать автором
Обновить
110.3

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Обзор библиотеки FluentValidation. Часть 7.1. Встроенные валидаторы

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 639

Рассматриваем часть встроенных валидаторов:

NotNull (значение не равно null)
Null (значение равно null)
NotEmpty (значение не равно null, пустой строке, пробелам, 0 элементам коллекции)
Empty (значение равно null, пустой строке, пробелам, 0 элементам коллекции)
NotEqual (значение не равно определённому либо не равно указанному свойству)
Equal (значение равно определённому либо равно указанному свойству)

Читать далее
Всего голосов 9: ↑4 и ↓5 -1
Комментарии 12

Новости

Rule-based AI + Unity

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 1.1K

Привет! В прошлой статье мы уже говорили про искусственный интеллект и трудности его выбора. В этой мы поговорим как начать его писать так чтобы потом не выстрелить себе в жопу ногу.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 5

Самый простой и подробный гайд по конкурентным коллекциям в C#

Уровень сложности Простой
Время на прочтение 18 мин
Количество просмотров 7.5K


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

Конкурентные коллекции в C# предлагают встроенные механизмы для обработки конкурентного доступа, что делает их мощным инструментом в программировании с конкурентным доступом.

В рамках статьи я попробую объяснить System.Collections.Concurrent настолько, насколько это возможно, включая примеры и сценарии использования. Также будет затронута тема сравнения с неизменяемыми (immutable) и замороженными (frozen) коллекциями.
Читать дальше →
Всего голосов 45: ↑43 и ↓2 +41
Комментарии 19

Другой способ понять, как работает async/await в C#

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 5.5K

Про закулисье async/await написано предостаточно. Как правило, авторы декомпилируют IL-код, смотрят на IAsyncStateMachine и объясняют, вот дескать какое преобразование случилось с нашим исходным кодом. Из бесконечно-длинной прошлогодней статьи Стивена Тауба можно узнать мельчайшие детали реализации. Короче, всё давно рассказано. Зачем ещё одна статья?

Я приглашаю читателя пройти со мной обратным путём. Вместо изучения декомпилированного кода мы поставим себя на место дизайнеров языка C# и шаг за шагом превратим async/await в код, который почти идентичен тому, что синтезирует Roslyn.

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 18

Истории

Обзор библиотеки FluentValidation. Часть 6. Внедрение зависимостей

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 914

Библиотеку FluentValidation можно использовать с любой библиотекой внедрения зависимостей. В этой части будут примеры на библиотеке Microsoft.Extensions.DependencyInjection. У нас есть следующие валидаторы:

Читать далее
Всего голосов 8: ↑4 и ↓4 0
Комментарии 0

KatWalk C2: ч2, подслушаем, подсмотрим и разнюхаем или как общаться с незнакомым железом на незнакомом языке

Уровень сложности Средний
Время на прочтение 27 мин
Количество просмотров 535

В прошлой статье я рассказал что это за платформа, и показал как можно получить данные с неё и как встроить код в стороннее приложение.

Однако, получение данных требует постоянно висящего приложения (на C#), и надо понять что же конкретно оно делает.

Давайте разберёмся как общаться с железом и избавимся от балласта!.. Переписав на Kotlin. Почему Kotlin? Потому что я на нем никогда еще не писал.

Погружаемся
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 4

Обзор библиотеки FluentValidation. Часть 5. Условия

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 809

Вы можете задавать условия через методы расширения When и Unless для определения, должны ли выполняться все предыдущие валидаторы (до вызова метода расширения) либо конкретный валидатор в правиле RuleFor. Применение метода расширения When:

Читать далее
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 2

Семантические ловушки асинхронности: Ключи к разгадке и эффективному освоению тем Task, Синхронность, Асинхронность

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 6.6K

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

Такая ситуация имеет место когда начинающий программист знакомится с темами Task, Синхронность, Асинхронность. Ситуация усугубляется тем что зачастую, более опытные коллеги применяют в жаргоне выражения из разряда «Синхронное/Асинхронное выполнение задачи».

Для того, чтобы распутать этот «Гордиев узел», давайте подойдем к проблеме издалека: рассмотрим ее на примере работы симфонического оркестра. Сравним при этом значения проблемных терминов с точки зрения людей, обладающих различной профессиональной ориентацией.

Читать далее
Всего голосов 15: ↑12 и ↓3 +9
Комментарии 14

Обзор библиотеки FluentValidation. Часть 4. Сообщения об ошибках. Локализация

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 1.1K

Прямо "из коробки" доступны переводы сообщений об ошибках на разных языках для встроенных валидаторов. Есть возможность частично переопределять сообщения об ошибках для встроенных валидаторов под нужную локаль. Также возможно локализовать свои кастомные сообщения об ошибках (например через файлы ресурсов).

Исследуем:
1. Свойство ValidatorOptions.Global.LanguageManager.Culture
2. Свойство CultureInfo.CurrentUICulture
3. Свойство CultureInfo.CurrentCulture
4. Тип LanguageManager
5. Тип IStringLocalizer

Читать далее
Всего голосов 7: ↑3 и ↓4 -1
Комментарии 2

Обзор библиотеки FluentValidation. Часть 3. Сообщения об ошибках

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 1.1K

В этом обзоре про:

1. Переопределение сообщения об ошибке WithMessage

2. Заполнители для сообщения об ошибке {PropertyName}, {PropertyValue}, {PropertyPath}

3. Переопределение названия свойства в сообщении об ошибке WithName, OverridePropertyName

Читать далее
Всего голосов 12: ↑6 и ↓6 0
Комментарии 2

Обзор библиотеки FluentValidation. Часть 2. Коллекции

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 1.7K

Способы описания правил валидаций для элементов коллекций.

Метод RuleForEach
Комбинация методов RuleForEach + ChildRules
Комбинация методов RuleFor + ForEach

Читать далее
Всего голосов 14: ↑8 и ↓6 +2
Комментарии 4

Обзор библиотеки FluentValidation. Часть 1. Первые шаги

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 2.6K

Всем привет, меня зовут Влад, я начинаю серию статей по обзору библиотеки FluentValidation на русском языке. Источником информации является официальная дока. Не могу назвать это уроком или полноценным переводом, решил назвать это обзорами.

Читать далее
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 16

Работа со временем и датой в C# с применением библиотеки Humanizer

Время на прочтение 7 мин
Количество просмотров 3.8K

Цель этой статьи — показать вам, как использовать Humanizer, чтобы вывести работу со временем и датой в ваших C#-проектах на новый уровень. Я расскажу о том, как преобразовать объекты DateTime и TimeSpan в удобный для восприятия человеком вид, как настраивать параметры гуманизации и как объединять гуманизацию строк со временеме/датой. Мы также рассмотрим некоторые реальные сценарии использования и примеры того, как Humanizer может улучшить пользовательский опыт в отношении времени и даты.

Читать далее
Всего голосов 15: ↑11 и ↓4 +7
Комментарии 12

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Десктопное приложение с нуля на .Net и C# с помощью ChatGPT

Уровень сложности Простой
Время на прочтение 13 мин
Количество просмотров 17K

Говорят, что нейросети скоро заменять программистов, можно будет просто ставить им задачу и они будут сами писать код. В своей работе я довольно часто использую ChatGPT и по опыту знаю, что его ответы далеко не всегда адекватные, особенно если задача нетривиальная. Но поскольку я задаю ему вопросы, касающиеся моей профессиональной области (я фронтендер), то ещё на этапе чтения его ответа я могу понять, где он прогнал и уточнить какие-то моменты. Порой даже я могу просто уловить его идею и дальше не мучать расспросами, а докрутить его решение сам.

Мне стало интересно, каково всё-таки писать приложение с помощью нейросети с нуля (и возможно ли это вообще, при условии, что ты не программист), поэтому для чистоты эксперимента я выбрал область, в которой я совершенно не шарю - попробую написать десктопное приложение на .Net и C#.

Читать далее
Всего голосов 39: ↑37 и ↓2 +35
Комментарии 27

Правило 16 байт: развенчиваем миф о производительности структур в C#

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 13K

По умолчанию, при передаче в метод или при возврате из метода, экземпляры значимых типов копируются, когда как экземпляры ссылочных типов передаются по ссылке. В 2008 году была выпущена книга «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries»‎. В этой книге рекомендовалось не использовать структуры размером больше 16 байт, поскольку, очевидно, структуры большего размера копируются медленнее. Несмотря на то, что прошло уже 16 лет, в сообществе C# разработчиков до сих пор популярно мнение, что производительность структур размером больше 16 байт хуже. Даже Google на запрос «recommended structure size c#» говорит, что это не более 16 байт. В этой статье мы попробуем докопаться до правды.

Читать далее
Всего голосов 53: ↑52 и ↓1 +51
Комментарии 29

Хватит маппить все руками, используй Mapster

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 18K

Привет, Хабр! Меня зовут Георгий, я С#-разработчик в SimbirSoft. Хочу рассказать об опыте использования библиотеки Mapster: как он может упростить разработку, сэкономить силы и частично избавиться от рутины маппинга.

Данная статья подойдет и тем, кто только собирается открыть для себя мир автомаппинга, и тем, кто хочет найти для себя альтернативу используемой библиотеки. Для полного понимания, что тут будет происходить желательно обладать базовым пониманием C#, знать о существовании DI и подозревать, что рефлексия не так проста, как кажется.  Ну и LINQ с EF.Core, куда же без них (хотя про них достаточно просто когда-то слышать и примерно представлять, зачем они нужны).

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 24

Pure.DI v2.1

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 2.6K

С момента выхода генератора исходного кода Pure.DI версии 2.0 летом 2023 прошло уже больше чем пол года. За это время удалось собрать отзывы по его использованию, добавить несколько полезных фич, улучшить производительность анализа и качество генерируемого кода, а также исправить ошибки и мелкие недочеты. В этой статье разберем несколько новых возможностей версии 2.1, которые могут быть полезны.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 11

Миграция API с Framework на .NET6 — скандалы, интриги, расследования и немного выводов

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 4.5K

Давным-давно, во времена, когда по Земле бродили цифровые динозавры, а разработчики .NET ещё помнили, зачем нужна технология WebForms (и какие у неё были проблемы с производительностью), в Контуре появился продукт под названием Фокус, предназначенный для проверки контрагентов. И у этого продукта довольно быстро появился API, ориентированный на крупных клиентов.

ASP.NET MVC был ещё в новинку, до появления WebAPI оставались годы, и отцы-основатели проекта приняли вполне актуальное, с учётом реалий того времени, решение: делать API на базе ashx-хендлеров, чтобы максимально повысить скорость работы.

Шли годы, .NET Framework сперва меняла версии как ветреная красавица перчатки, а потом и вовсе перешла в разряд «для поддержки жизнедеятельности требуется опытный некромант», .NET Core сперва появился, а потом благополучно переименовался в просто .NET, дорос до 6-й, а потом и 7-й версии… а API Фокуса всё ещё жил по старому, доброму принципу «работает — не трогай». И вот, наконец небосвод провернулся, и звёзды сошлись в нужной позиции. Мы поехали на .NET 6.

Оговорюсь сразу, что сам переезд произошёл примерно полгода назад, когда .NET 8 ещё находилась в стадии альфы. Именно поэтому в качестве целевой версии .NET была выбрана именно стабильная 6-я. Тем не менее большинство проблем будут актуальны и при миграции на 8-ю версию.

Читать далее
Всего голосов 25: ↑24 и ↓1 +23
Комментарии 14

Записки хирурга. Распиливание слонов PostgreSQL наживую и без анестезии

Время на прочтение 14 мин
Количество просмотров 7.9K

Привет, Хабр! С вами снова AliExpress Order Management System. Сегодня поговорим о том, как мы увеличивали количество шардов без длительного даунтайма. Спойлер: в конце - самое интересное ;)

Дальше
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 16

Тонкости работы short-circuit routing в ASP.NET Core 8.0

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 4K

В статье детально и с примерами рассказываю про short-circuit routing — новую фичу Minimal API в ASP.NET Core 8.0. Она позволяет игнорировать добавленные middleware при вызове отдельных endpoint-ов. Рассмотрим, как это работает, сравним методы и немного поговорим про то, как добавляются middleware в приложение на ASP.NET Core.

Не читайте эту статью, если вам нужно просто прикрутить short-circuit routing и не париться, как оно работает, — для этого достаточно документации и обзора от Andrew Lock. У меня же после них осталось больше вопросов, чем ответов, потому я залез по самые локти в код и разобрался. Если вам тоже интересно — добро пожаловать под кат.

Хочу разобраться
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 9

Вклад авторов

Работа