Вы не можете. Методы экземпляра всегда имеют преимущество над методами расширения, если они применимы. Разрешение члена будет рассматривать методы расширения только после того, как ему не удастся найти опцию без расширения.
Я бы предложил вам просто переименовать свой метод - если бы точка не вызывала этот метод прозрачно с существующим кодом.
Если вы сделали это принять IList<T>
вместо List<T>
, вы могли бы создать тип обертки, которая реализует IList<T>
и делегаты все звонки на обернутой список, выполняя любые дополнительные задачи, как вы идете. Тогда вы могли бы также написать метод расширения до IList<T>
, который создал оболочку, что позволило бы в некоторых случаях более свободно использовать синтаксис. Лично я предпочитаю метод обертки для получения нового типа коллекции, так как это означает, что вы можете использовать его с существующими коллекциями, что делает изменения кода потенциально меньше ... но все зависит от того, что вы пытаетесь сделать.
Даже если 'list.Add (" 3 ")' переписывал 'List.Add' и называл ваш метод расширения, вы должны ожидать, что' list.Add (item) 'сделает то же самое, что приведет к бесконечной рекурсии. – Kobi
Я вижу, мой вопрос - это всего лишь вопрос любопытства, и я предоставляю пример кода, чтобы показать, что я хочу, тем не менее вы правы –