C #: обнаружение методов расширения - PullRequest
4 голосов
/ 04 февраля 2010

Какие инструменты или методы вы рекомендуете для обнаружения методов расширения C # в коде? Они находятся в правильном пространстве имен, но могут быть в любом файле решения.

В частности:

  • Как найти все методы расширения (и перейти к ним) для текущего типа в окне кода?

У меня есть Resharper (v4), так что если у него есть механизм, о котором я не знаю - пожалуйста, поделитесь!

Ответы [ 4 ]

5 голосов
/ 04 февраля 2010

Если у вас есть источник, вы можете искать this Type identifier, используя регулярные выражения.Учитывая тот факт, что он должен быть первым параметром функции, что-то вроде этого должно сработать:

\(this:b+:i:b+:i

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

if(this is Blah...

Что мы можем исправить, добавив static к нашему поиску, поскольку методы расширения должны быть статическими:

static.*\(this:b+:i:b+:i

Это выигралоне работает в таких случаях:

public
  static ExtensionMethod(
   this int
    iVal) {
}

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

Теперь в IDE мне не хватает возможности распознавать расширение.методы, которые находятся в не импортированном пространстве имен.Как и в случае, когда вы знаете имя класса, если вы введете его, IDE даст вам подсказку либо использовать его явно, либо импортировать пространство имен.В конце концов, именно так я импортирую все свои пространства имен и часто пытаюсь сделать то же самое с методами расширения.

1 голос
/ 04 февраля 2010

Это довольно низкотехнологичный, но как насчет Ctrl-F, ищущего "this: b + MyClassName"?

0 голосов
/ 04 февраля 2010

Если у вас есть инструмент для повышения резкости, просто нажмите и удерживайте клавишу Ctrl и нажмите на метод.

0 голосов
/ 04 февраля 2010

Если вы используете VS, который, я полагаю, вы intellisense, покажет все доступные методы расширения для данного объекта для вас (отмечены синим цветом, добавленным к обычному значку метода экземпляра). Этот список может отличаться от файла к файлу (метод, называемый aMethod, может означать две разные вещи в двух разных файлах), даже если тип объекта один и тот же (который основан на способах определения расширений)

...