Извлечение подстроки. Казалось бы, что тут может быть сложного? В любом современном языке программирования это можно сделать через функцию substring или через slicing. За время работы C# разработчиком я повидал разный код, в том числе разные способы извлечения подстроки. В этой статье мы рассмотрим самые распространённые из них, сделаем замеры производительности и проанализируем результаты.
C# *
Объектно-ориентированный язык программирования
Новости
Календарь семьи на MudBlazor с авторизацией и развертыванием на Ubuntu
Введение:
MudBlazor - это амбициозная библиотека компонентов для Blazor, основанная на дизайне Material и с акцентом на простоту использования и четкую структуру. Она идеально подходит для разработчиков .NET, которые хотят быстро создавать веб-приложения, не сталкиваясь с проблемами CSS и JavaScript. MudBlazor полностью написан на C#, что позволяет вам легко адаптировать, исправлять или расширять фреймворк. https://mudblazor.com/
Задачей была разработать полезное приложение для нашей семьи, названное "Семейный календарь", которое объединяет функциональность от Google, Yandex и Mail для удобного ведения семейного расписания. Я хотел создать приложение, которое позволит нам легко планировать и отслеживать события, задачи и важные даты в нашей семье.
Блеск и нищета паттерна «Спецификация» в С#. Оцениваем планы запросов
О паттерне «Спецификация», который позволяет улучшить структуру приложения, и, следовательно, увеличить гибкость, уменьшив при этом объем кода, а значит — сократить количество ошибок, но это не точно. Почему? - читаем ниже.
Async/await, There is no thread – легко обмануть тех, кто сам обманываться рад
Когда нам показывают на некотором примере, что асинхронная операция не создает потока, нам пытаются внушить, что асинхронная операция НИКОГДА не создает потока и в принципе не может его создать, но это не правда! Простой пример с работающим кодом доказывает обратное. Давайте разберем этот пример.
Логика тех, кто поддается такому внушению мне вполне понятна, они хотят упростить себе жизнь, сократить объем теории, с которой надо разбираться.
Интересно было бы понять логику тех, кто поддерживает такое внушение, выдавая обрезанную теорию за полноценную, вполне осознавая, что все не так просто, как хотелось бы.
Истории
Как быстро и качественно импортозаместить UI
Всем привет.
Хочу рассказать о своем опыте импортозамещения UI.
Не предлагаю ничего нового, известный подход, приложенный к конкретной задаче.
Кратко задачу можно описать так:
Есть: Исходный проект с множеством таблиц и форм.
Задача: Нужно в целевом проекте создать аналогичные таблицы и формы по другой технологии. По сути много однотипных классов и файлов, отличающихся заранее известными частями.
Решение:
1. Автоматически собрать необходимую информацию из исходного проекта в файл.
2. Дополнить этот файл в той части которую не получилось собрать автоматически.
3. Создавать нужные файлы по шаблону заменяя подстановочные символы в шаблоне значениями из файла. Полученные файлы могут быть если необходимо доработаны.
Первое что приходит на ум при решении такой задачи — это использовать встроенный в VisualStudio кодогенератор, он реализует похожую задачу. Я изначально рассматривал использование его. Но передумал. Получается много сложнее. Кроме того, генератор в студии предполагается использовать постоянно, мой генератор нужен одноразово что бы создать заготовку кода. Хотя я не исключаю, что буду применять его и далее.
Очевидные для меня плюсы такого подхода:
1) На порядок быстрее.
2) Код максимально однообразен.
3) Код можно легко покрыть автоматически созданными тестами.
4) В случае внесения в шаблон изменений, а это обязательно случится и не раз, можно быстро пересоздать код.(если шаблон доработан, то используя систему контроля версий можно быстро поправить как надо)
Обзор библиотеки FluentValidation. Часть 7.1. Встроенные валидаторы
Рассматриваем часть встроенных валидаторов:
NotNull
(значение не равно null
)Null
(значение равно null
)NotEmpty
(значение не равно null
, пустой строке, пробелам, 0
элементам коллекции)Empty
(значение равно null
, пустой строке, пробелам, 0
элементам коллекции)NotEqual
(значение не равно определённому либо не равно указанному свойству)Equal
(значение равно определённому либо равно указанному свойству)
Rule-based AI + Unity
Привет! В прошлой статье мы уже говорили про искусственный интеллект и трудности его выбора. В этой мы поговорим как начать его писать так чтобы потом не выстрелить себе в жопу ногу.
Самый простой и подробный гайд по конкурентным коллекциям в C#
Когда несколько потоков обращаются к общим ресурсам, должна быть обеспечена потокобезопасность, чтобы избежать повреждения данных и неожиданного поведения.
Конкурентные коллекции в C# предлагают встроенные механизмы для обработки конкурентного доступа, что делает их мощным инструментом в программировании с конкурентным доступом.
В рамках статьи я попробую объяснить
System.Collections.Concurrent
настолько, насколько это возможно, включая примеры и сценарии использования. Также будет затронута тема сравнения с неизменяемыми (immutable) и замороженными (frozen) коллекциями.Другой способ понять, как работает async/await в C#
Про закулисье async/await
написано предостаточно. Как правило, авторы декомпилируют IL-код, смотрят на IAsyncStateMachine
и объясняют, вот дескать какое преобразование случилось с нашим исходным кодом. Из бесконечно-длинной прошлогодней статьи Стивена Тауба можно узнать мельчайшие детали реализации. Короче, всё давно рассказано. Зачем ещё одна статья?
Я приглашаю читателя пройти со мной обратным путём. Вместо изучения декомпилированного кода мы поставим себя на место дизайнеров языка C# и шаг за шагом превратим async/await
в код, который почти идентичен тому, что синтезирует Roslyn.
Обзор библиотеки FluentValidation. Часть 6. Внедрение зависимостей
Библиотеку FluentValidation можно использовать с любой библиотекой внедрения зависимостей. В этой части будут примеры на библиотеке Microsoft.Extensions.DependencyInjection
. У нас есть следующие валидаторы:
KatWalk C2: ч2, подслушаем, подсмотрим и разнюхаем или как общаться с незнакомым железом на незнакомом языке
В прошлой статье я рассказал что это за платформа, и показал как можно получить данные с неё и как встроить код в стороннее приложение.
Однако, получение данных требует постоянно висящего приложения (на C#), и надо понять что же конкретно оно делает.
Давайте разберёмся как общаться с железом и избавимся от балласта!.. Переписав на Kotlin. Почему Kotlin? Потому что я на нем никогда еще не писал.
Обзор библиотеки FluentValidation. Часть 5. Условия
Вы можете задавать условия через методы расширения When
и Unless
для определения, должны ли выполняться все предыдущие валидаторы (до вызова метода расширения) либо конкретный валидатор в правиле RuleFor
. Применение метода расширения When
:
Семантические ловушки асинхронности: Ключи к разгадке и эффективному освоению тем Task, Синхронность, Асинхронность
При освоении новых знаний мы, так или иначе, стараемся связать их с уже освоенными знаниями, в связи с чем при изучении и без того непростых абстракций, в терминах которых заложен свой особый смысл, нередко заходим в тупик.
Такая ситуация имеет место когда начинающий программист знакомится с темами Task, Синхронность, Асинхронность. Ситуация усугубляется тем что зачастую, более опытные коллеги применяют в жаргоне выражения из разряда «Синхронное/Асинхронное выполнение задачи».
Для того, чтобы распутать этот «Гордиев узел», давайте подойдем к проблеме издалека: рассмотрим ее на примере работы симфонического оркестра. Сравним при этом значения проблемных терминов с точки зрения людей, обладающих различной профессиональной ориентацией.
Ближайшие события
Обзор библиотеки FluentValidation. Часть 4. Сообщения об ошибках. Локализация
Прямо "из коробки" доступны переводы сообщений об ошибках на разных языках для встроенных валидаторов. Есть возможность частично переопределять сообщения об ошибках для встроенных валидаторов под нужную локаль. Также возможно локализовать свои кастомные сообщения об ошибках (например через файлы ресурсов).
Исследуем:
1. Свойство ValidatorOptions.Global.LanguageManager.Culture
2. Свойство CultureInfo.CurrentUICulture
3. Свойство CultureInfo.CurrentCulture
4. Тип LanguageManager
5. Тип IStringLocalizer
Обзор библиотеки FluentValidation. Часть 3. Сообщения об ошибках
В этом обзоре про:
1. Переопределение сообщения об ошибке WithMessage
2. Заполнители для сообщения об ошибке {PropertyName}
, {PropertyValue}
, {PropertyPath}
3. Переопределение названия свойства в сообщении об ошибке WithName
, OverridePropertyName
Обзор библиотеки FluentValidation. Часть 2. Коллекции
Способы описания правил валидаций для элементов коллекций.
Метод RuleForEach
Комбинация методов RuleForEach
+ ChildRules
Комбинация методов RuleFor
+ ForEach
Обзор библиотеки FluentValidation. Часть 1. Первые шаги
Всем привет, меня зовут Влад, я начинаю серию статей по обзору библиотеки FluentValidation на русском языке. Источником информации является официальная дока. Не могу назвать это уроком или полноценным переводом, решил назвать это обзорами.
Работа со временем и датой в C# с применением библиотеки Humanizer
Цель этой статьи — показать вам, как использовать Humanizer, чтобы вывести работу со временем и датой в ваших C#-проектах на новый уровень. Я расскажу о том, как преобразовать объекты DateTime
и TimeSpan
в удобный для восприятия человеком вид, как настраивать параметры гуманизации и как объединять гуманизацию строк со временеме/датой. Мы также рассмотрим некоторые реальные сценарии использования и примеры того, как Humanizer может улучшить пользовательский опыт в отношении времени и даты.
Десктопное приложение с нуля на .Net и C# с помощью ChatGPT
Говорят, что нейросети скоро заменять программистов, можно будет просто ставить им задачу и они будут сами писать код. В своей работе я довольно часто использую ChatGPT и по опыту знаю, что его ответы далеко не всегда адекватные, особенно если задача нетривиальная. Но поскольку я задаю ему вопросы, касающиеся моей профессиональной области (я фронтендер), то ещё на этапе чтения его ответа я могу понять, где он прогнал и уточнить какие-то моменты. Порой даже я могу просто уловить его идею и дальше не мучать расспросами, а докрутить его решение сам.
Мне стало интересно, каково всё-таки писать приложение с помощью нейросети с нуля (и возможно ли это вообще, при условии, что ты не программист), поэтому для чистоты эксперимента я выбрал область, в которой я совершенно не шарю - попробую написать десктопное приложение на .Net
и C#
.
Правило 16 байт: развенчиваем миф о производительности структур в C#
По умолчанию, при передаче в метод или при возврате из метода, экземпляры значимых типов копируются, когда как экземпляры ссылочных типов передаются по ссылке. В 2008 году была выпущена книга «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries». В этой книге рекомендовалось не использовать структуры размером больше 16 байт, поскольку, очевидно, структуры большего размера копируются медленнее. Несмотря на то, что прошло уже 16 лет, в сообществе C# разработчиков до сих пор популярно мнение, что производительность структур размером больше 16 байт хуже. Даже Google на запрос «recommended structure size c#» говорит, что это не более 16 байт. В этой статье мы попробуем докопаться до правды.
Вклад авторов
-
sidristij 1681.2 -
SergVasiliev 1125.0 -
olegchir 1001.8 -
n0mo 667.0 -
sahsAGU 656.0 -
marshinov 654.6 -
timyrik20 652.6 -
kekekeks 623.4 -
DreamWalker 566.0 -
PsyHaSTe 547.4