Оператор vs выражение
Начиная с C# 8.0, длинный и многословный оператор
Выглядит это следующим образом:
Здесь
#operators
👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
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
Такое случается
👉 Как известно, в .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
👍3🔥1👏1
Свойства в языке C#
В сущности, свойство это замена set/get методов. В свойствах используется лексема value - это контекстное ключевое слово языка
Можно выделить пару базовых рекомендаций по использованию свойства:
1️⃣ Для установки и получения данных всегда рекомендуется использовать свойства, в том числе везде внутри определения класса.
2️⃣ Не рекомендуется писать много кода с аксессорах
#properties
👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
В сущности, свойство это замена set/get методов. В свойствах используется лексема value - это контекстное ключевое слово языка
Можно выделить пару базовых рекомендаций по использованию свойства:
set и get. При необходимости правильнее выносить этот код в отдельную функцию, которую вызывать из самого аксессора.#properties
👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
🔥3👍1👏1😁1
Сопоставление с образцом помогает проверить, находятся ли в переменной данные нужного типа.
Пример:
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
Anonymous Quiz
8%
Ничем
25%
QueryFirst падает в исключение, если нет объектов, а QuerySingle - нет
67%
QueryFirst возвращает первый объект, если в результате запроса много объектов, а QuerySingle падает
👍6🔥3🦄3👏1
Dapper — что это и зачем
👀 Dapper — это библиотека объектно-реляционного отображения на .NET.
Иными словами, это штука, которая говорит СУБД выполнить ваш, написанный руками, SQL-запрос или хранимую процедуру и возвращает в ответ объект или список .NET-объектов конкретного типа.
🏪 Dapper был создан разработчиками всем известного ресурса StackOverflow для использования, собственно, на этом ресурсе.
Необходимость создания этой библиотеки заключалась в недостаточной производительности предшественника, Linq to SQL.
❗️ Dapper — это не полноценная ORM, это так называемая micro-ORM, как её позиционируют сами разработчики. У неё нет поддержки кэширования, нет отложенной загрузки, нет поддержки миграций и много чего ещё тоже нет. Всё, что она позволяет делать, это выполнять SQL-запрос и типо-безопасно возвращать объект(ы).
#dapper
👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Иными словами, это штука, которая говорит СУБД выполнить ваш, написанный руками, SQL-запрос или хранимую процедуру и возвращает в ответ объект или список .NET-объектов конкретного типа.
Необходимость создания этой библиотеки заключалась в недостаточной производительности предшественника, Linq to SQL.
#dapper
👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3👏2