Когда я впервые узнал о расширениях, я действительно злоупотреблял ими и злоупотреблял ими.
По большей части я начал избегать использования любых методов расширения по ряду причин.
Некоторые причины, по которым я прекратил их использование, отмечены в ссылке Скотта на блоге выше, например, «Подумайте дважды, прежде чем расширять типы, которыми вы не владеете». Если у вас нет контроля над источником для расширяемых типов, вы можете столкнуться с проблемами / коллизиями в будущем, если у типа источника есть некоторые дополнения / изменения, например, перенос вашего проекта на более новую версию .NET. Если в более новой версии .NET есть метод с тем же именем, что и у вашего расширения, кто-то может получить удар.
Основная причина, по которой я прекратил использовать методы расширения, заключается в том, что из чтения кода невозможно быстро определить, где находится источник метода и кому он принадлежит.
Когда вы просто читаете код, вы не можете определить, является ли метод расширением или это просто стандартный метод NET API для типа.
Меню intellisense может очень быстро запутаться.