Улучшите свое свободное кодирование с помощью этих основных методов расширения!

Введение

С тех пор, как я узнал о методах расширения, я постоянно находил новые возможности, облегчающие мою жизнь программиста. Методы расширения — идеальное применение O в SOLID — Принцип Открытого Закрытого. Класс должен быть как можно более простым и раскрывать свойства и методы снаружи только тогда, когда они действительно нужны другим компонентам.

С помощью методов расширения вы можете реализовать дополнительные методы для своего класса без необходимости изменения самого класса! Это идеально подходит для повторяющихся методов, которые принимают класс в качестве аргумента.

Реализовать метод расширения довольно просто. Взгляните на следующий пример:

Это реализует метод ForEach() для каждого IEnumerable<T> (представленного ключевым словом this), точно так же, как вы знаете из типа List<T>. Единственное, что вам нужно сделать, чтобы получить доступ к этому методу, это добавить ссылку на соответствующее пространство имен, в данном случае это System.

Мои 7 наиболее часто используемых методов расширения

Начиная с .NET 6, Microsoft реализовала несколько методов расширения для IEnumerable<T>, которые раньше были в моем списке лучших, включая DistinctBy() и Chunk(). Однако, начиная с .NET 7, мне все еще не хватает некоторых очень важных методов, особенно для обработки коллекций задач.

Без лишних слов, вот мои наиболее часто используемые методы расширения, которые я использую в .NET 7:

1. Попробуйте асинхронный

Первый метод расширения — мой любимый. Сколько раз вы добавляли новый блок try-catch вокруг только что созданного метода и немного раздражались из-за того, что он портил внешний вид? Вот очень изящное решение, когда ваш метод возвращает Task или Task<T>:

Теперь вы можете просто написать:

var result = await GetSomethingAsync().TryAsync();

И ваш метод будет автоматически заключен в блок try-catch. Кроме того, вы можете указать errorHandler для дополнительной логики, такой как ведение журнала. Result, которые возвращают эти методы, затем можно проверить на успешность, и вы можете продолжить свою логику.

Кстати, Result или Result<T>, которые вы можете заметить в этих методах, взяты из моей предыдущей статьи:



2. Когда все асинхронно

Наличие более одного Task или Task<T> в коллекции немного неудобно для обработки обычным способом. Вам нужно позвонить Task.WhenAll(tasks), что немного выбивает меня из колеи, так как это не беглый стиль. Вот как это выглядит:

Теперь я могу просто иметь любую коллекцию задач и просто написать:

var results = await tasks.WhenAllAsync();

3. Когда все последовательные асинхронные

Следующий метод расширения даже экономит вам еще несколько строк кода и дает вам возможность выполнять каждую задачу одну за другой. Это может быть полезно в сценариях, когда вы не можете выполнять много задач параллельно.

4. Когда все параллельные асинхронные

И последнее, но не менее важное: может быть вариант использования, когда вы можете выполнять задачи параллельно, но может быть ограничение макс. параллельные рабочие. Для этого случая у меня есть следующий метод расширения:

С помощью параметра degree вы можете указать, сколько задач должно выполняться параллельно.

5. Мапасинк

Это тоже свободное расширение, но на этот раз для одного Task или Task<T>.

С помощью этого метода расширения вы можете плавно сопоставить Task<T1> с Task<T2> аналогично методу Enumerable.Select().

6. DoAsync

Похожим методом является DoAsync() , но вместо преобразования задачи вы можете выполнить побочную логику с результатом tasks без изменения возвращаемого значения.

7. Строка. Присоединиться

Самый последний метод расширения, который я иногда использую для объединения строк для ведения журнала. Обычно для этого можно использовать string.Join(), но опять же, это не бегло и выбивает меня из потока.

Сокращения

Методы сокращения технически не являются методами расширения, но также очень полезны для сохранения некоторого кода:

Чтобы их было легко использовать, вам нужно создать специальный файл (обычно я называю его GlobalUsings.cs) на корневом уровне и поместить в него следующую строку:

global using static System.Abbreviations;

1. Обр.

Метод Arr является аббревиатурой для создания нового IEnumerable<T> из уже существующих значений. Обычно для этого требуется очень уродливый код, как показано ниже:

var arr = new [] { param1, param2,... };

Теперь вы можете просто написать это так:

var arr = Arr(param1, param2,... );

Что выглядит красивее и вам не придется выделывать акробатические трюки с пальцами на клавиатуре.

2. Попробуйте

Как часто вы просто хотели добавить простой блок try-catch вокруг нового метода, и он казался вам уродливым из-за того, что он занимал так много места в вашем коде? Вот решение с методом аббревиатуры Try().

В самой сокращенной форме вы можете написать:

Try(TestMethod);

где TestMethod — метод, не принимающий никаких параметров. Это позволяет вам писать чрезвычайно короткий код и устранять эти неприятные блоки try-catch.

Для асинхронных методов я бы порекомендовал вам использовать метод расширения TryAsync из приведенного выше, так как он находится в свободном стиле.

Конечно, есть больше возможностей, где вы можете использовать эту схему и делать свои собственные сокращения, а также методы расширения. Дайте мне знать, что вы думаете о в комментариях.

Спасибо, что нашли время прочитать эту статью. Надеюсь, вы нашли его информативным, познавательным и интересным.
Мы очень ценим вашу поддержку и участие.

Если вы заинтересованы в том, чтобы быть в курсе последних тенденций, советов и приемов для чистой архитектуры, чистого кодирования и новейших технологических стеков, особенно в контексте C #, .NET и Angular, я был бы признателен. если вы решили следовать за мной.

Удачного дня!

Если вы еще не используете Medium для ежедневного расширения своих знаний, сейчас самое время начать! С Medium вы можете легко получить больше знаний по высокопрофессиональным темам, публиковать качественный контент и охватить более широкую аудиторию. Чтобы начать, просто создайте учетную запись Medium, используя эту ссылку:

Присоединиться к Medium сейчас

Таким образом, вы получите доступ к мощной платформе, которая поможет вам общаться с новыми писателями и читателями и каждый день узнавать что-то новое.