В последнее время часто приходится работать с
Многим известно, что
Но сегодня хочется рассказать о хорошей, как мне кажется, практике проектирования перечисления.
Создавая новое перечисление, старайтесь предоставлять значение по умолчанию.
Иначе
Конечно, так надо делать только в соответствии с описываемой предметной областью.
Такое значение может называться
#полезное #tips
enum
.Многим известно, что
enum
это тип значения, определённый набором именованных констант, в каких случаях его удобно использовать и так далее.Но сегодня хочется рассказать о хорошей, как мне кажется, практике проектирования перечисления.
Создавая новое перечисление, старайтесь предоставлять значение по умолчанию.
Иначе
default(TEnum)
может вернуть первое значение из перечисления, что может приводить к логическим несостыковкам и смысловым ошибкам.Конечно, так надо делать только в соответствии с описываемой предметной областью.
Такое значение может называться
None
, Default
или Unknown.
Такая структура enum
позволит описать, как работать с вашим пользовательским типом данных.#полезное #tips
👍22
Для чего можно использовать язык C#?
Anonymous Quiz
7%
Для создания веб сайтов
5%
Для создания программ под ПК
5%
Для написания игр
2%
Для создания лишь игр и программ
81%
Всё перечисленное
👍14👎4🔥3💩3🤬2❤1
Когда используется ключевое слово value?
Anonymous Quiz
70%
Для получения ссылки на значение, которое присваивается свойству
12%
Для передачи значений в базовый конструктор
6%
Для получения ссылки на текущий экземпляр класса
12%
Для обобщения входных параметров методов
👍13
Где верно происходит вывод данных в консоль?
Anonymous Quiz
4%
Console.write("Hi");
2%
сonsole.log("Hi");
93%
Console.WriteLine("Hi");
1%
print("Hi");
😁16🤡5🍓2😴2
👎13👍6💩6❤2🤮1
Что выведет строка Console.WriteLine($"{0.12345f:F3}")?
Anonymous Quiz
9%
Выведет 0.12345
11%
Выведет 0.12345 на новой строке
50%
Выведет 0.123
30%
Выведет 0.123 на новой строке
🤯9🤬4👍3
Внезапная задача
Найдите отличия в приведённых фрагментах кода, и в каком из них находится баг?
1️⃣
Найдите отличия в приведённых фрагментах кода, и в каком из них находится баг?
1️⃣
var children = _childrenRepository.GetByParentIds(parentIds);
return parentIds.ToDictionary(
parentId => parentId,
parentId => children.Where(child => child.ParentId == parentId).ToList());
2️⃣var children = _childrenRepository.GetByParentIds(parentIds);
var grouped = children.GroupBy(child => child.ParentId);
return grouped
.ToDictionary(
childrenGroup => childrenGroup.Key,
childrenGroup => childrenGroup.ToList());
👎6👍2💩2
Ответ: дело в том, что во втором случае теряется информация: в итоговом словаре не будет родительских сущностей с пустой коллекцией дочерних.
👍3👎3🤔2🤡1
Возможно вы не знали этот метод LINQ
С 6-ой версии в .NET присутствует метод
#полезное #tips
С 6-ой версии в .NET присутствует метод
Chunk
, который позволяет дробить коллекцию на одинаковые кусочки, так называемые "чанки".// получаем итерируемый объектПользуйтесь на здоровье!
var enumerable = Enumerable.Range(1, 999);
// дробим на чанки
var chunks = enumerable.Chunk(29);
// итерируем по чанкам
foreach(var chunk in chunks) // для каждого чанка
{
foreach(var item in chunk) // для каждого элемента в чанке
{
Console.WriteLine(item);
}
}
#полезное #tips
🔥25👍12❤2
Что из нижеперечисленного не может иметь модификатор virtual?
Anonymous Quiz
12%
Свойства
33%
Поля
43%
Индексаторы
12%
Методы
👍8
Как определяются атрибуты?
Anonymous Quiz
1%
/ Имя атрибута /
74%
[ Имя атрибута ]
9%
{ Имя атрибута }
16%
< Имя атрибута >
Как генерировать валидные данные?
Активные читатели моего канала могут подумать, что сейчас будет очередной пост про какую-нибудь кастомизацию AutoFixture, ведь все знают, как библиотека генерирует строки и числа.
А вот и нет! В сегодняшнем разговоре о генерации данных ключевое слово валидные.
Ответ на вопрос в заголовке: Bogus.
Да, для C# существует не один генератор данных.
Но разница проявляется как в назначении, так и в устройстве.
AutoFixture - это скорее некоторое подобие DI контейнера с CQRS архитектурой.
Bogus - инструмент, больше похожий на FluentValudation.
Для каждой модельки создаётся специальный генератор.
В нём с помощью
В арсенале богуса есть адреса, имена, различные локали, схемы генерации, расширяемость и многое другое.
#полезное #tips
Активные читатели моего канала могут подумать, что сейчас будет очередной пост про какую-нибудь кастомизацию AutoFixture, ведь все знают, как библиотека генерирует строки и числа.
А вот и нет! В сегодняшнем разговоре о генерации данных ключевое слово валидные.
Ответ на вопрос в заголовке: Bogus.
Да, для C# существует не один генератор данных.
Но разница проявляется как в назначении, так и в устройстве.
AutoFixture - это скорее некоторое подобие DI контейнера с CQRS архитектурой.
Bogus - инструмент, больше похожий на FluentValudation.
Для каждой модельки создаётся специальный генератор.
В нём с помощью
fluent interface api
всем полям прописываются правила по заполнению значений.public class OrderFaker : Faker<Order>
{
public OrderFaker()
{
RuleFor(o => o.OrderId, f => f.Guid.NewGuid());
RuleFor(o => o.Item, f => f.Lorem.Sentence());
RuleFor(o => o.Quantity, f => f.Random.Number(1, 10));
}
}
var orderFaker = new OrderFaker();
var order = orderFaker.Generate();
Таким образом, данные получаются осмысленными.В арсенале богуса есть адреса, имена, различные локали, схемы генерации, расширяемость и многое другое.
#полезное #tips
👍8
Какие из модификаторов не может иметь абстрактный класс?
Anonymous Quiz
22%
static, internal.
56%
sealed, static.
22%
sealed, internal.
Какой длины должны быть функции?
Если обратиться к такой классике, как «Чистый Код» Роберта С. Мартина, то можно увидеть следующее:
Первое правило функций — они должны быть маленькими. Второе правило функций заключается в том, что они должны быть еще меньше
То есть, кажется, что это означает примерно следующее:
1️⃣ Функции должны быть короткими — не длиннее 20 строк и в большинстве случаев менее 10 строк.
2️⃣ Функции должны иметь как можно меньше аргументов, желательно ни одного.
Стоит придерживаться стратегии «разделяй и властвуй».
Попробовать разделить метод на несколько логических шагов, определить что от чего зависит.
Затем, разбить это на минимальные модули, которые соединяются в единый механизм, например, с помощью внедрения зависимостей.
Такие действия, безусловно, помогут начертить границы ответственностей, сделают код чище и читабельнее.
Однако, практика показывает, что в любом проекте можно найти большой объём кода под рефакторинг с методами и на 100, 200, 300 строк с десятком параметров.
Как вы думаете, стоит их распиливать и переписывать?
#полезное #tips
Если обратиться к такой классике, как «Чистый Код» Роберта С. Мартина, то можно увидеть следующее:
1️⃣ Функции должны быть короткими — не длиннее 20 строк и в большинстве случаев менее 10 строк.
2️⃣ Функции должны иметь как можно меньше аргументов, желательно ни одного.
Стоит придерживаться стратегии «разделяй и властвуй».
Попробовать разделить метод на несколько логических шагов, определить что от чего зависит.
Затем, разбить это на минимальные модули, которые соединяются в единый механизм, например, с помощью внедрения зависимостей.
Такие действия, безусловно, помогут начертить границы ответственностей, сделают код чище и читабельнее.
Однако, практика показывает, что в любом проекте можно найти большой объём кода под рефакторинг с методами и на 100, 200, 300 строк с десятком параметров.
Как вы думаете, стоит их распиливать и переписывать?
#полезное #tips
💯6👍4
Full-Stack .NET Developer
Полная занятость, удаленно
Зарплата: 4500-5700$
Компания: Smartbrain.io
Описание: https://telegra.ph/Full-Stack-NET-Developer-07-29
#вакансия
Полная занятость, удаленно
Зарплата: 4500-5700$
Компания: Smartbrain.io
Описание: https://telegra.ph/Full-Stack-NET-Developer-07-29
#вакансия
Telegraph
Full-Stack .NET Developer
Remote | full time | 4500-5700$Smartbrein.io Технологии: Серверная часть: C#, http://Asp.Net, Docker, Kubernetes, Azure DevOps, Entity Framework, микросервисы, SQL Server Внешний интерфейс: HTML, Javascript/Typescript, современная среда JS: Vue.js (предпочтительно)…
👍1
Где хранятся экземпляры типов значений?
Anonymous Quiz
3%
Хранятся на диске
21%
Хранятся в управляемой куче
34%
Могут храниться в управляемой куче и на стеке
42%
Хранятся на стеке
😱9👎1
Как лучше регистрировать коллекцию зависимостей?
Представим, что вам нужно внедрить коллекцию из сервисов типа
▪️Создать свою кастомную коллекцию, и зарегистрировать её.
▪️Буквально зарегистрировать объект списка или массива с набором нужных зависимостей
Однако можно поступить гораздо проще и просто регистрировать зависимости как обычно. Например:
#полезное #tips
Представим, что вам нужно внедрить коллекцию из сервисов типа
IMyService
. Тогда вы ожидаете её вот так:class MyOtherService : IMyOtherServiceЧто приходит на ум?
{
public MyOtherService(IEnumerable<IMyService> myServices)
{
//...
}
}
▪️Создать свою кастомную коллекцию, и зарегистрировать её.
▪️Буквально зарегистрировать объект списка или массива с набором нужных зависимостей
Однако можно поступить гораздо проще и просто регистрировать зависимости как обычно. Например:
services.AddScoped<IMyService, MyService>();DI контейнер всё поймёт и даже если будет зарегистрирована всего одна реализация, она будет представлена в коллекции.
#полезное #tips
👍1🔥1
В чем отличие между break и continue?
Anonymous Quiz
1%
Нет отличий
5%
Continue работает только в циклах, break дополнительно в методах
8%
Break используется в Switch case, а continue в циклах
87%
Continue пропускает итерацию, break выходит из цикла
👍8👎6🤯4🤔1🤡1