main() | c#, patterns & stuff – Telegram
main() | c#, patterns & stuff
158 subscribers
28 photos
1 video
1 link
💻 Канал про паттерны проектирования и любопытные особенности .NET

📖 Контент:
- .NET C#
- паттерны проектирования
- принципы программирования,
- GIT
- тесты, шутки, прибаутки

🤝 Сотрудничество:
tg: @ilyailleya
email: ilya.lee@outlook.com
Download Telegram
Какое ключевое слово используется для проверки совместимости и возвращает true/false?
Anonymous Quiz
18%
as 🤨
53%
is 🤨
9%
at 🤨
21%
wtf 🤨
👍1🥰1👏1
Оператор vs выражение SWITCH

Начиная с C# 8.0, длинный и многословный оператор switch с этими дурными case'ами break'ами можно заменить на выражение switch
Выглядит это следующим образом:

int j = 100;
int i = j switch
{
1 => 10,
2 => 20,
3 => 30,
_ => 100
};


Здесь case и break заменяются операторм лямбды (=>), а ветвь default заменяется символом нижнего подчёркивания

#operators


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
🔥6👍2🥰1👏1👀1🦄1
Какой класс применяется для чтения данных из текстового файла?
Anonymous Quiz
28%
StringReader
17%
TextReader
55%
StreamReader
👍2🔥2🥰1🦄1
🧐 0.1 + 0.2 ≠ 0.3?
Такое случается


👉 Как известно, в .NET есть три наиболее распространённых типа данных для хранения вещественных чисел — float, double и decimal.
Как-то так повелось, что чаще всего в приложениях используется тип double. Особенно если вы не задумываетесь о количестве оперативной памяти на стороне клиента.

❗️Диапазон типа double просто лютый — от ±5.0 × 10^(−324) до ±1.7 × 10^308. Количество разрядов после десятичного разделителя — не сосчитать.
Но если вы напишете следующий код:

double a = 0.1;
double b = 0.2;
if (a + b == 0.3)
Console.WriteLine("true");
else
Console.WriteLine("false");


то к своему удивлению можете обнаружить, что результат будет false.


Почему же?
Всё дело в том, как компьютер хранит в памяти числа с плавающей запятой.
Если десятичное число можно однозначно представить в виде двоичного числа (перевести в двоичную систему счисления без потери точности), то проблем со сравнением чисел не будет.

❗️ Но если десятичное число не может быть однозначно представлено в двоичной системе, то и оператор сравнения выдаст некорректный результат.

‼️ Например, число 12.75 будет представлено в двоичной системе как 1100.1100.
А вот число 0.1 должно быть представлено как 0.000(1100), где скобки означают бесконечное повторение этих четырёх чисел. Но поскольку невозможно хранить бесконечное число, оно в какой-то момент обрезается, что и приводит к потере точности.
А потому 0.1 + 0.2 уже не будет в точности равно 0.3.

🔖 Поэтому — если в приложении/классе/методе требуется точное сравнение вещественных (дробных) чисел, тип decimal — ваш бро.


ℹ️ Экскурс в историю
Кстати, с использованием оператора равенства при сравнении чисел двойной точности случился очень неприятный казус. Во время войны в Персидском заливе американский противоракетный комплекс Patriot был запрограммирован с использованием чисел двойной точности с плавающей запятой (тех самых double). Неточность в расчётах привела к тому, что комплекс не смог перехватить иракскую ракету Р-17, и та попала в американские казармы в городе Дхарам.

Так что погроммирование — это то ещё искусство.


👍 Если и так всё знал (да ладно, не заливайте, я вот не знал),
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3🥰1👀1
Можно ли объявить поле класса типа var?
Anonymous Quiz
33%
Да
61%
Нет
6%
Наверное
👍3🔥1👏1
Свойства в языке C#

В сущности, свойство это замена set/get методов. В свойствах используется лексема value - это контекстное ключевое слово языка

Можно выделить пару базовых рекомендаций по использованию свойства:

1️⃣ Для установки и получения данных всегда рекомендуется использовать свойства, в том числе везде внутри определения класса.

2️⃣ Не рекомендуется писать много кода с аксессорах set и get. При необходимости правильнее выносить этот код в отдельную функцию, которую вызывать из самого аксессора.

#properties


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
🔥3👍1👏1😁1
🤨 Сопоставление с образом в операторе IF

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

Пример:


object o = "3";
int j = 4;
if (o is int i)
WriteLine($"{i} * {j}");


Этот код проверит, можно ли привести к типу int то, что лежит в переменной o, и, если да, то результат приведения будет записан в переменную i.

#operators


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Какой метод преобразует строковый литерал в число?
Anonymous Quiz
36%
Convert.ToInt16("32") 🤔
11%
TryParse("34") 🤔
11%
Parse("34") 🤨
43%
Все вот эти ребята 🤨
👍4🔥2👏1
test
😱6👏2🤡2👻1
Dapper — что это и зачем

👀 Dapper — это библиотека объектно-реляционного отображения на .NET.
Иными словами, это штука, которая говорит СУБД выполнить ваш, написанный руками, SQL-запрос или хранимую процедуру и возвращает в ответ объект или список .NET-объектов конкретного типа.

🏪 Dapper был создан разработчиками всем известного ресурса StackOverflow для использования, собственно, на этом ресурсе.
Необходимость создания этой библиотеки заключалась в недостаточной производительности предшественника, Linq to SQL.

❗️ Dapper — это не полноценная ORM, это так называемая micro-ORM, как её позиционируют сами разработчики. У неё нет поддержки кэширования, нет отложенной загрузки, нет поддержки миграций и много чего ещё тоже нет. Всё, что она позволяет делать, это выполнять SQL-запрос и типо-безопасно возвращать объект(ы).

#dapper


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3👏2