❇️ Выходные на пороге, а значит время очередного еженедельного дайджеста.
Предлагаю вашему внимаю самые 🔥 интересные вопросы этой недели:
🔸 C# Intermediate – Queue, Stack, And Hashtable in C#
🔸 What does .NET's Equals method really mean?
🔸 Use structures to improve the readability of your code
🔸 Playing with C# 7 - Deconstruct
🔸 The Evolution of C#
🔸 IEnumerable<T> and .Where Linq method behaviour?
🔸 How to find all classes that implements a generic abstract class using reflection in C#?
🔸 Why are 1000 threads faster than a few?
Всем отличных выходных 😉
#sof_weekly
Предлагаю вашему внимаю самые 🔥 интересные вопросы этой недели:
🔸 C# Intermediate – Queue, Stack, And Hashtable in C#
🔸 What does .NET's Equals method really mean?
🔸 Use structures to improve the readability of your code
🔸 Playing with C# 7 - Deconstruct
🔸 The Evolution of C#
🔸 IEnumerable<T> and .Where Linq method behaviour?
🔸 How to find all classes that implements a generic abstract class using reflection in C#?
🔸 Why are 1000 threads faster than a few?
Всем отличных выходных 😉
#sof_weekly
Переполнение в C#
Во время выполнения арифметических операций с целочисленными типами возможна ситуация, при которой итоговый результат выходит за рамки доступных значений результирующего типа (другими словами не может быть корректно представлен и размещён в памяти).
Такая ситуация называется переполнением (overflow) и корнями уходит к арифметике и битовому представлению чисел в computer science.
По умолчанию в C# и .NET при переполнении ведущие биты обнуляются, после чего результат "умещается" в доступных битах. В случае с беззнаковыми типами - большие значения станут меньше, а при переполнении знаковых типов положительные числа станут отрицательными.
Позвольте мне продемонстрировать это поведение на примерах:
🔸 Максимальным значением для беззнакового типа
🔸
🔸 Минимальное значение для знакового типа
💬 Как я уже упоминал ранее, использовать минимальные и максимальные значения в циклах стоит с осторожностью, иначе это может привести к неожиданным последствиям. Примером тому служит следующий код. Что выведется на экране? Ответ вы сможете найти ниже на странице 😉
#data_types
Во время выполнения арифметических операций с целочисленными типами возможна ситуация, при которой итоговый результат выходит за рамки доступных значений результирующего типа (другими словами не может быть корректно представлен и размещён в памяти).
Такая ситуация называется переполнением (overflow) и корнями уходит к арифметике и битовому представлению чисел в computer science.
По умолчанию в C# и .NET при переполнении ведущие биты обнуляются, после чего результат "умещается" в доступных битах. В случае с беззнаковыми типами - большие значения станут меньше, а при переполнении знаковых типов положительные числа станут отрицательными.
Позвольте мне продемонстрировать это поведение на примерах:
🔸 Максимальным значением для беззнакового типа
uint
является 0xffffffff:uint u1 = 0xffffffff;
u1 = u1 + 5; // 0x00000004 (перенос)
🔸
int.MaxValue
- максимальное значение для знакового типа int
:int n1 = int.MaxValue;
n1 = n1 + 1; // -2147483648 (перенос)
🔸 Минимальное значение для знакового типа
short
является -32768:short s1 = short.MinValue;
s1 = (short)(s1 - 1); // 32767 (перенос)
💬 Как я уже упоминал ранее, использовать минимальные и максимальные значения в циклах стоит с осторожностью, иначе это может привести к неожиданным последствиям. Примером тому служит следующий код. Что выведется на экране? Ответ вы сможете найти ниже на странице 😉
#data_types
Контроль переполнения в C#
В прошлой заметке я уже упоминал о том, что по умолчанию при переполнении ведущие биты обнуляются, после чего результат "умещается" в доступных битах:
Однако это поведение может быть изменено и для этого мы можем воспользоваться ключевым словом
В таком случае вместо продолжения выполнения программы будет выброшено исключение
Синтаксис ключевого слова
Также стоит упомянуть о возможности изменения поведения при переполнении в настройках проекта:
#data_types
В прошлой заметке я уже упоминал о том, что по умолчанию при переполнении ведущие биты обнуляются, после чего результат "умещается" в доступных битах:
int n1 = int.MaxValue;
n1 = n1 + 1; // -2147483648 (перенос)
Однако это поведение может быть изменено и для этого мы можем воспользоваться ключевым словом
checked
:int n1 = int.MaxValue;
n1 = checked(n1 + 1); // OverflowException
В таком случае вместо продолжения выполнения программы будет выброшено исключение
OverflowException
, которое мы можем или корректно обработать, или проигнорировать для завершения программы.Синтаксис ключевого слова
checked
позволяет контролировать переполнение не только у конкретных операторов, но и целых блоков кода:checked
{
int n1 = int.MaxValue;
n1 = n1 + 1; // OverflowException
}
Также стоит упомянуть о возможности изменения поведения при переполнении в настройках проекта:
Project > Properties > Build > Advanced > Check for arithmetic overflow/underflow
.#data_types
Выключение контроля переполнения в C#
В предыдущей заметке я рассказывал о ключевом слове
В том случае, если в настройках проекта в качестве поведения по умолчанию мы выбираем опцию выбрасывать исключения в случае переполнения, то
Как и в случае с
Уверен, вы замечали, что следующий код не будет скомпилирован и отобразится ошибка:
В этом случае нам также может помочь
💬 Одной из полезных возможностей в Visual Studio для повышения продуктивности для меня являются сниппеты (настоятельно рекомендую ознакомиться всем тем, кто их не использует 😉). А какой из них вы используете чаще всего?
#data_types
В предыдущей заметке я рассказывал о ключевом слове
checked
и возможности устанавливать поведение по умолчанию в случае переполнения в рамках проектов. Нелишним будет упомянуть и о ключевом слове unchecked
, которое делает обратное.В том случае, если в настройках проекта в качестве поведения по умолчанию мы выбираем опцию выбрасывать исключения в случае переполнения, то
unchecked
может нам помочь избежать этого при необходимости:int n1 = int.MaxValue; // 2147483647 (0x7FFFFFFF)
int n2 = unchecked(n1 + 1); // Перенос -2147483648
int n3 = n1 + 1; // OverflowException
Как и в случае с
checked
мы так же может использовать unchecked
не только для конкретных операторов, но и целых участков кода:int n1 = int.MaxValue; // 2147483647
unchecked
{
int n2 = n1 + 1; // Перенос -2147483648
int n4 = n1 * 2; // -2
}
Уверен, вы замечали, что следующий код не будет скомпилирован и отобразится ошибка:
int n1 = int.MaxValue + 1; // Ошибка компиляции: overflow
В этом случае нам также может помочь
unchecked
:int n2 = unchecked(int.MaxValue + 1);
💬 Одной из полезных возможностей в Visual Studio для повышения продуктивности для меня являются сниппеты (настоятельно рекомендую ознакомиться всем тем, кто их не использует 😉). А какой из них вы используете чаще всего?
#data_types
Parse чисел в C#
Каждый числовый тип в C# содержит метод
Однако, важно отметить, что результат выполнения этого метода может обернуться для нас и следующими исключениями:
🔸 FormatException:
В этом примере мы пробуем привести (распарсить) дробное значение к типу
🔸 OverflowException:
В данном случае мы пытаемся привести отрицательное число к типу
💬 Одним из полезных атрибутов, помогающем как в документации, так и в контроле поведения, является
#strings
Каждый числовый тип в C# содержит метод
Parse
, с помощью которого мы можем преобразовывать строки в соответствующие числовые значения:byte b1 = byte.Parse("200");
sbyte sb1 = sbyte.Parse("-100");
float f1 = float.Parse("1.2e-4");
Однако, важно отметить, что результат выполнения этого метода может обернуться для нас и следующими исключениями:
🔸 FormatException:
int n1 = int.Parse("3.4"); // FormatException
В этом примере мы пробуем привести (распарсить) дробное значение к типу
int
, в результате чего получаем исключение о некорректности формата входного параметра 3.4
.🔸 OverflowException:
uint ui1 = uint.Parse("-1"); // OverflowException
В данном случае мы пытаемся привести отрицательное число к типу
uint
, значения которого могут быть только положительными. Как итог - исключение, сигнализирующее о переполнении.💬 Одним из полезных атрибутов, помогающем как в документации, так и в контроле поведения, является
ObsoleteAttribute
. С его помощью мы можем помечать элементы программы, которые больше не должны использоваться и вскоре могут быть удалены. Обычно мы получаем предупреждение, однако, знали ли вы, что это поведение настраиваемое и мы можем даже возвращать полноценную ошибку компиляции 🙂?#strings
❇️ Рабочая неделя заканчивается, а значит пришло время очередной недельной подборки на выходные.
Предлагаю вашему внимаю самые 🔥 интересные статьи и вопросы этой недели:
🔸 Why does Enumerable.Single() iterate all elements, even when more than one item has already been found?
🔸 How to use Factory Method Design Pattern in C#
🔸 C# Intermediate – Delegates in C#
🔸 How to properly implement an interface that was designed for async usage?
🔸 Secure Random Integers in .NET Core 3
🔸 .NET Standard vs. .NET Core
Всем отличных выходных 😉
#sof_weekly
Предлагаю вашему внимаю самые 🔥 интересные статьи и вопросы этой недели:
🔸 Why does Enumerable.Single() iterate all elements, even when more than one item has already been found?
🔸 How to use Factory Method Design Pattern in C#
🔸 C# Intermediate – Delegates in C#
🔸 How to properly implement an interface that was designed for async usage?
🔸 Secure Random Integers in .NET Core 3
🔸 .NET Standard vs. .NET Core
Всем отличных выходных 😉
#sof_weekly
Конкатена́ция строк в C#
В C# мы можем использовать оператор
Мы можем использовать этот оператор неограниченное количество раз в рамках одного выражения (expression), а само выражение использовать в тех местах кода, где ожидается строка:
Более того, специальные методы String.Concat и String.Format содержат дополнительные перегрузки, которые также могут быть использованы для конкатенации:
💬 Продолжая рассказывать про полезные фичи в C# нельзя не упомянуть coalesce оператор
#strings
В C# мы можем использовать оператор
+
не только для сложения чисел, но и склеивания (конкатенации) строк:string s1 = "C#";
string s2 = "fun";
string s3 = s1 + " is " + s2; // "C# is fun"
Мы можем использовать этот оператор неограниченное количество раз в рамках одного выражения (expression), а само выражение использовать в тех местах кода, где ожидается строка:
string s1 = "Hello " + " Wor" + "ld";
Console.WriteLine("Wish " + "you " + "the best");
Более того, специальные методы String.Concat и String.Format содержат дополнительные перегрузки, которые также могут быть использованы для конкатенации:
// Concat method
string s4 = String.Concat(new object[] {
"The ", 3, " musketeers"
});
string s5 = String.Concat("This", "That");
// Use String.Format to concatenate
string s6 = string.Format("{0}{1}{2}", s1, " is ", s2);
💬 Продолжая рассказывать про полезные фичи в C# нельзя не упомянуть coalesce оператор
??
. Принцип его работы прост- возвращать left-hand операнд если он не null
и right-hand в обратном случае: int y = x ?? -1
. Берите на вооружение 😉#strings
Forwarded from SeasonedDev
Dear friend,
If you read this, then you, like me, are clearly passionate about programming and tech 💻
My name is Maxim and I'm happy to meet you here ✌️
I hope that what I post on this channel will take your software development skills to the next level.
💬 If you have any questions, then you can always contact me via the @webdev_en chat.
See you at the new channel: @seasoneddev
If you read this, then you, like me, are clearly passionate about programming and tech 💻
My name is Maxim and I'm happy to meet you here ✌️
I hope that what I post on this channel will take your software development skills to the next level.
💬 If you have any questions, then you can always contact me via the @webdev_en chat.
See you at the new channel: @seasoneddev
What will be the output of the following program?
Anonymous Quiz
41%
Error occurred!
47%
Index error occurred!
12%
Compile-time error
#post
.NET 6 is on the way, and I wanted to share some of my favorite new APIs in .NET and ASP.NET Core that you are going to love. Why are you going to love them? Well because they were directly driven by our fantastic .NET developer community! Let’s get started!
Read more...
.NET 6 is on the way, and I wanted to share some of my favorite new APIs in .NET and ASP.NET Core that you are going to love. Why are you going to love them? Well because they were directly driven by our fantastic .NET developer community! Let’s get started!
Read more...
#book
Beginning C# and .NET, 2021 Edition
Perkins Benjamin, Reid Jon D.
Get a running start to learning C# programming with this fun and easy-to-read guide.
As one of the most versatile and powerful programming languages around, you might think C# would be an intimidating language to learn. It doesn't have to be!
Download the book
Beginning C# and .NET, 2021 Edition
Perkins Benjamin, Reid Jon D.
Get a running start to learning C# programming with this fun and easy-to-read guide.
As one of the most versatile and powerful programming languages around, you might think C# would be an intimidating language to learn. It doesn't have to be!
Download the book
Which of the following is the default access modifier of the class members?
Anonymous Quiz
18%
Public
57%
Private
22%
Internal
3%
Protected internal
What will be the output of the following program?
Anonymous Quiz
37%
True
53%
False
7%
Exception
3%
null
#post
For .NET 6, we have made FileStream much faster and more reliable, thanks to an almost entire re-write. For same cases, the async implementation is now a few times faster!
Read more...
For .NET 6, we have made FileStream much faster and more reliable, thanks to an almost entire re-write. For same cases, the async implementation is now a few times faster!
Read more...
#challenge
💻 Array of Multiples | #easy
Create a function that takes two numbers as arguments (
Examples:
🏆 Leave your solutions in the comments. The solution will be posted below in a couple of hours 👇
#interview
💻 Array of Multiples | #easy
Create a function that takes two numbers as arguments (
num
, length
) and returns an array of multiples of num
until the array length reaches length
.Examples:
ArrayOfMultiples(7, 5) ➞ [7, 14, 21, 28, 35]For your convenience: dotnetfiddle.
ArrayOfMultiples(12, 10) ➞ [12, 24, 36, 48, 60, 72, 84, 96, 108, 120]
ArrayOfMultiples(17, 6) ➞ [17, 34, 51, 68, 85, 102]
🏆 Leave your solutions in the comments. The solution will be posted below in a couple of hours 👇
#interview
✨ Here is a solution for the #challenge above
💬 Personally, I like the first solution more, it is much more expressive!
💬 Personally, I like the first solution more, it is much more expressive!