Делаем консольную утилиту на C#, которая находит номера, начинающиеся с +7 или 8, и приводит их к единому формату
В этой задаче:
• Используем регулярное выражение для поиска номеров с любыми разделителями.
• Извлекаем нужные цифры, игнорируя пробелы, скобки и тире.
• Форматируем найденные номера в удобный и читаемый вид.
Полезно, когда нужно унифицировать контактную информацию в текстах, базах данных и логах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38🤝7❤5👍2👎1
Возвращаем несколько значений с помощью Tuples и деконструкции!
В C# часто возникает ситуация, когда метод должен вернуть сразу несколько значений. Раньше для этого использовали out‑параметры или создавали отдельные классы и структуры.
Теперь можно вернуть несколько значений напрямую, без лишнего шаблонного кода, а затем удобно их распаковать
Для начала подключим нужную библиотеку:
Теперь опишем метод, который возвращает кортеж из двух значений:
Вызовем метод и используем деконструкцию, чтобы сразу получить оба значения:
Вот что получится при запуске:
🔥 Благодаря
➡️ C# Ready | #практика
В C# часто возникает ситуация, когда метод должен вернуть сразу несколько значений. Раньше для этого использовали out‑параметры или создавали отдельные классы и структуры.
Теперь можно вернуть несколько значений напрямую, без лишнего шаблонного кода, а затем удобно их распаковать
Для начала подключим нужную библиотеку:
using System;
Теперь опишем метод, который возвращает кортеж из двух значений:
public (int Sum, int Product) Calculate(int a, int b)
{
return (a + b, a * b);
}
Вызовем метод и используем деконструкцию, чтобы сразу получить оба значения:
var (sum, product) = Calculate(3, 4);
Console.WriteLine($"Sum: {sum}, Product: {product}");
Вот что получится при запуске:
Sum: 7, Product: 12
🔥 Благодаря
Tuple
и деконструкции ты можешь возвращать несколько значений без лишнего кода и out‑параметров.Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥13👍7
👍9❤4🔥4
Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }
• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.
• Лишняя синхронизация превращается в узкое место производительности.
Поэтому,
lock
помогает писать стабильный и предсказуемый многопоточный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤7👍6🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь вы найдёте базовые руководства по синтаксису языка, подробное описание сборок и отражения, работу с потоками и файлами, сетевое программирование, оптимизацию приложений и встроенные тесты для самопроверки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥4
Они позволяют упростить логику проверки на null, безопасно извлекать значения и подставлять значения по умолчанию без лишнего кода. Отлично подходят для случаев, когда нужно работать с value-типами, но предусмотреть возможность их отсутствия.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🤝10👍6❤4
👍6🔥4❤1
Init-only свойства для безопасной инициализации объекта!
Сейчас научимся задавать значения свойств только при создании объекта — с помощью аксессора
Для начала подключим стандартные библиотеку
Опишем простой класс
Создадим экземпляр объекта и зададим значения свойств через инициализатор:
Попробуем изменить значение после создания объекта — компилятор не даст этого сделать:
🔥
➡️ C# Ready | #практика
Сейчас научимся задавать значения свойств только при создании объекта — с помощью аксессора
init
. Удобно для создания неизменяемых структур без лишнего шаблонного кода.Для начала подключим стандартные библиотеку
using System;
Опишем простой класс
Person
с двумя свойствами, доступными только для инициализации:class Person
{
public string Name { get; init; }
public int Age { get; init; }
}
Создадим экземпляр объекта и зададим значения свойств через инициализатор:
var person = new Person
{
Name = "Анна",
Age = 28
};
Console.WriteLine($"{person.Name}, {person.Age} лет");
Попробуем изменить значение после создания объекта — компилятор не даст этого сделать:
person.Age = 29; // Ошибка: свойство доступно только для инициализации
🔥
Init-only
свойства позволяют задать значение один раз и гарантируют неизменяемость объекта после созданияPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤11👍7🤝1