Если у вас есть источник, вы можете искать 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 даст вам подсказку либо использовать его явно, либо импортировать пространство имен.В конце концов, именно так я импортирую все свои пространства имен и часто пытаюсь сделать то же самое с методами расширения.