Уютное сообщество C# разработчиков pinned «Навигация по тегам: Вакансии - #вакансия Статьи - #полезное Трюки и возможности языка - #tips Тесты - #тест Книги - #книги»
Факт дня про C# 11
Допустим, в проекте подключены
Затем, объявляется некоторый класс с полем, у которого
Чтобы не получить от компилятора
Допустим, в проекте подключены
nullable reference types
.Затем, объявляется некоторый класс с полем, у которого
notnull
ссылочный тип.Чтобы не получить от компилятора
warning CS8618
, многие делают так:public class FooВ C# 11 появилось ключевое слово
{
public string Bar {get; set;} = null!;
}
required
, которое позволяет красиво обыграть эту ситуацию:public class Foo#полезное #tips
{
public required string Bar {get; set;}
}
Что выведет на экран программа выше?
Anonymous Quiz
20%
IFoo Executes IBar Execute.
6%
IBar Executes.
10%
IFoo Executes.
64%
Произойдет ошибка компиляции.
🤯5💩3👍1
3 причины использовать
Необходимо проверить, что из следующего вашему приложению нужно:
1️⃣ Уникально и однозначно определять единый момент во времени.
В системе появится недвусмысленное понятие «сейчас», можно будет логгировать временные метки транзакций, событий, созданий, модификаций и так далее.
2️⃣ Выполнение общих арифметических операций над датой и временем с высокой точностью.
Например, прибавляете к некоторой дате шесть месяцев, и ожидаемый результат должен получиться с поправкой на летнее время.
3️⃣ Хранение нескольких связанных между собой меток времени, как частей одной структуры или одного массива данных.
#полезное #tips
DateTimeOffset
вместо DateTime
Если что-то из этого вам подходит стоит задуматься о смене используемого типа данных 🤔Необходимо проверить, что из следующего вашему приложению нужно:
1️⃣ Уникально и однозначно определять единый момент во времени.
В системе появится недвусмысленное понятие «сейчас», можно будет логгировать временные метки транзакций, событий, созданий, модификаций и так далее.
2️⃣ Выполнение общих арифметических операций над датой и временем с высокой точностью.
Например, прибавляете к некоторой дате шесть месяцев, и ожидаемый результат должен получиться с поправкой на летнее время.
3️⃣ Хранение нескольких связанных между собой меток времени, как частей одной структуры или одного массива данных.
#полезное #tips
🔥8👍7👎3💩2🤮1
Middle+/Senior QA Engineer fullstack (Backend)
Полная занятость, удаленно
Зарплата: от 300 т.р.
Компания: Rubraincom
Описание: https://telegra.ph/MiddleSenior-QA-Engineer-fullstack-Backend-07-10-2
#вакансия
Полная занятость, удаленно
Зарплата: от 300 т.р.
Компания: Rubraincom
Описание: https://telegra.ph/MiddleSenior-QA-Engineer-fullstack-Backend-07-10-2
#вакансия
Telegraph
Middle+/Senior QA Engineer fullstack (Backend)
Remote | full time | от 300 т.р.RubraincomКомпания Rubraincom ищет Middle+/Senior QA Engineer fullstack (Backend) в банковский проект. УСЛОВИЯ: Оформление по ТК РФ Занятость: полная Удаленный формат работы Мы ожидаем: ▪️Опыт автоматизации на Java или…
👍1
Самый редко используемый цикл в C#
Цикл
Его синтаксис таков:
Из этой особенности, отличающей
А как часто вы используете
#полезное #tips
Цикл
do while
редко используется, но важно помнить о его существовании, чтобы понимать возможные случаи применения.Его синтаксис таков:
do
{
// тело цикла
} while (condition)
Этот цикл всегда исполняет своё тело как минимум один раз, даже если условие не выполнено.Из этой особенности, отличающей
do while
от других видов циклов, вытекают его основные сценарии использования.А как часто вы используете
do while
?#полезное #tips
👍12💩2😢1
Какие циклы существуют в языке C#?
Anonymous Quiz
84%
for, while, do while, foreach
2%
for
1%
for, while
3%
for, while, do while
9%
for, while, foreach
❤4👎3🤮2💩2
"Стоит ли использовать
Здесь важно понимать, чем отличаются эти циклы.
Принцип его работы одинаков везде:
Перебираемому объекту даже не обязательно реализовывать
Разворачивается такой цикл примерно в следующее:
Обслуживание
Так что использование везде
#полезное #tips
foreach
, если for
быстрее?"Здесь важно понимать, чем отличаются эти циклы.
▪️for
- это классический управляющий оператор, который транслируется в +/- одинаковый IR или машинный код практически во всех языках программирования согласно блок-схеме выше.Принцип его работы одинаков везде:
for (выражение1; выражение2; выражение3)
оператор
▪️foreach
- это синтаксический сахар над итераторами, который ещё и работает согласно принципам утиной типизации.Перебираемому объекту даже не обязательно реализовывать
IEnumerable
.Разворачивается такой цикл примерно в следующее:
var enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext())
{
var item = enumerator.Current;
// ...
}
Невооружённым глазом видно, что здесь происходит вызов через VMT, возможен cast, выделение памяти и так далее.Обслуживание
foreach
очевидно дороже, потому что это абстракция.Так что использование везде
for
вместо foreach
- скорее микрооптимизация.#полезное #tips
👍8🔥4❤2
В последнее время часто приходится работать с
Многим известно, что
Но сегодня хочется рассказать о хорошей, как мне кажется, практике проектирования перечисления.
Создавая новое перечисление, старайтесь предоставлять значение по умолчанию.
Иначе
Конечно, так надо делать только в соответствии с описываемой предметной областью.
Такое значение может называться
#полезное #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