И сейчас разберемся с делегатами и лямбда-выражениями в сишарпе
Они позволяют передавать методы как параметры и реализовывать функциональный стиль программирования в C#.
1. Делегаты для передачи методов — служат типами для хранения ссылок на методы:
2. Использование лямбда-выражений — они упрощают синтаксис анонимных функций:
3. Передача делегатов в методы — делегаты также могут использоваться для передачи логики в метод:
Функция PerformOperation принимает логику в виде делегата и применяет ее
🔥 Про что ещё хотите увидеть разбор? Делись своим мнением в комментах под постом!
➡️ C# Ready | #техсобес
Они позволяют передавать методы как параметры и реализовывать функциональный стиль программирования в C#.
1. Делегаты для передачи методов — служат типами для хранения ссылок на методы:
delegate int Operation(int a, int b);
Operation add = (x, y) => x + y;
add(3, 4); // вернет 7
2. Использование лямбда-выражений — они упрощают синтаксис анонимных функций:
Func<int, int, int> multiply = (x, y) => x * y;
multiply(3, 4); // вернет 12
3. Передача делегатов в методы — делегаты также могут использоваться для передачи логики в метод:
void PerformOperation(int x, int y, Func<int, int, int> operation) {
Console.WriteLine(operation(x, y));
}
PerformOperation(5, 6, (a, b) => a - b); // выведет -1
Функция PerformOperation принимает логику в виде делегата и применяет ее
🔥 Про что ещё хотите увидеть разбор? Делись своим мнением в комментах под постом!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍4🤝4
Поговорим про изменение коллекции во время итераций без возможных ошибок
В C# есть распространенная ловушка, связанная с изменением коллекций во время их обхода с использованием
Давайте разберемся, как избежать этой ошибки:
Чтобы безопасно изменять коллекцию во время итерации, используйте метод
Еще одно решение — использовать цикл
Жми 🔥 если понравился пост и делись своим мнением в комментариях!
➡️ C# Ready | #практика
В C# есть распространенная ловушка, связанная с изменением коллекций во время их обхода с использованием
foreach
. Эта ошибка может привести к исключению InvalidOperationException
Давайте разберемся, как избежать этой ошибки:
List<int> list = new List<int> { 1, 2, 3 };
foreach (var number in list){
if (number == 2){
list.Remove(number); // Ошибка: InvalidOperationException
}
}
Чтобы безопасно изменять коллекцию во время итерации, используйте метод
RemoveAll
, который позволяет работать с коллекцией без изменения её структуры во время обхода:List<int> list = new List<int> { 1, 2, 3 };
list.RemoveAll(x => x == 2); // Правильный способ
Еще одно решение — использовать цикл
for
вместо foreach
. В этом случае можно контролировать индексы и безопасно изменять коллекцию:List<int> list = new List<int> { 1, 2, 3 };
for (int i = 0; i < list.Count; i++){
if (list[i] == 2){
list.RemoveAt(i); // Удаление элемента по индексу
i--; // Уменьшаем индекс после удаления
}
}
Жми 🔥 если понравился пост и делись своим мнением в комментариях!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍3🤝3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
Нашел сайтик с различными туториалами от Milan Jovanovic
Он предлагает туториалы по языку C#, что делает его ценным источником информации как для начинающих, так и для опытных разработчиков.
Даю вам ссылочку: milanjovanovic.tech
➡️ C# Ready | #ресурс
Он предлагает туториалы по языку C#, что делает его ценным источником информации как для начинающих, так и для опытных разработчиков.
Даю вам ссылочку: milanjovanovic.tech
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9🔥3🤝2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4🤝2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45👍6🔥3🤝1
Знакомы с рефлексией в шарпе?
И так, сегодня поговорим про рефлексию в C#. Она позволяет работать с типами и методами на этапе выполнения, но надо быть осторожным, если использовать её неправильно, можно не только замедлить программу, но и оставить уязвимости.
Давайте начнём с простого примера. Вот как можно вывести все методы класса string:
Это удобно, когда нужно проанализировать класс, но если таких операций много и без фильтрации, то они могут сильно нагрузить систему.
Теперь представьте ситуацию, когда имя класса передаётся в строке:
Такие штуки часто используют в плагинах или динамических системах, но тут важен контроль за входными данными, чтобы избежать ошибок или даже уязвимостей.
И, наконец, вызов метода через рефлексию:
🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.
Звучит круто, но без правильной проверки это может обернуться проблемами.
➡️ C# Ready | #практика
И так, сегодня поговорим про рефлексию в C#. Она позволяет работать с типами и методами на этапе выполнения, но надо быть осторожным, если использовать её неправильно, можно не только замедлить программу, но и оставить уязвимости.
Давайте начнём с простого примера. Вот как можно вывести все методы класса string:
Type type = typeof(string);
var methods = type.GetMethods();
foreach (var method in methods)
Console.WriteLine(method.Name);
Это удобно, когда нужно проанализировать класс, но если таких операций много и без фильтрации, то они могут сильно нагрузить систему.
Теперь представьте ситуацию, когда имя класса передаётся в строке:
string className = "System.Text.StringBuilder";
Type type = Type.GetType(className);
var instance = Activator.CreateInstance(type);
// StringBuilder
Console.WriteLine(instance?.GetType().Name);
Такие штуки часто используют в плагинах или динамических системах, но тут важен контроль за входными данными, чтобы избежать ошибок или даже уязвимостей.
И, наконец, вызов метода через рефлексию:
Type type = typeof(Console);
var method = type.GetMethod("WriteLine", new[] { typeof(string) });
method?.Invoke(null, new object[] { "Привет, рефлексия!" });
🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.
Звучит круто, но без правильной проверки это может обернуться проблемами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥7🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6
LINQ крайне прикольная штука, она позволяет решать сложные задачи обработки данных лаконично.
Сейчас расскажу про менее очевидные, но мощные возможности, которые помогут вам оптимизировать работу с коллекциями и данными:
1. Группировка с последующей фильтрацией — можно группировать элементы и сразу применять фильтры на основе условий:
var data = new[] { 1, 2, 3, 4, 5, 6 };
var result = data.GroupBy(x => x % 2)
.Where(g => g.Key == 1)
.SelectMany(g => g);
// Результат: [1, 3, 5]
2. Создание словарей с помощью ToDictionary — LINQ позволяет преобразовать коллекцию в словарь:
var items = new[] { "apple", "banana", "cherry" };
var dict = items.ToDictionary(x => x, x => x.Length);
// Результат: {"apple": 5, "banana": 6, "cherry": 6}
3. Выбор уникальных элементов через DistinctBy:
Сравнение объектов по конкретному ключу с использованием DistinctBy (доступно через
System.Linq
)var people = new[] {
new { Name = "Alice", Age = 30 },
new { Name = "Bob", Age = 25 },
new { Name = "Alice", Age = 35 }
};
var unique = people.DistinctBy(p =>
p.Name);
// Результат: Alice (30), Bob (25)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3🤝1