Как я могу найти все статические переменные в моем проекте c #? - PullRequest
12 голосов
/ 11 февраля 2012

Я хочу запустить некоторую часть моей программы командной строки параллельно с несколькими потоками, и я боюсь, что может остаться некоторая статическая переменная, которую я должен исправить (например, сделав ее [ThreadStatic]).Есть ли какой-нибудь инструмент или простой способ найти их в моем проекте?

Конечно, простой поиск "static" не очень помогает: у меня есть много статических методов, которые отлично работают и работают с любым количеством потоков

Ответы [ 5 ]

13 голосов
/ 02 апреля 2014

Примечание: ответ dasblinkenlight работает только в Visual Studio 2010 и более ранних версиях.

Ниже приведен перевод для Visual Studio 2012 и новее:

static(?([^\r\n])\s)+(\b(_\w+|[\w-[0-9_]]\w*)\b)(?([^\r\n])\s)+(\b(_\w+|[\w-[0-9_]]\w*)\b)(?([^\r\n])\s)*[=;]

Перевод выполнен со ссылкой: http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx

11 голосов
/ 11 февраля 2012

Поиск ваших файлов для static:b+:i:b+:i:b*[=;] с параметром регулярного выражения в Visual Studio должен включить статические переменные для вас.Это также принесет операторам ==, но их будет относительно легко отфильтровать визуально.

3 голосов
/ 11 февраля 2012

Помимо трюков с IDE, настоящий воин мог бы использовать Assembly.Load() для загрузки DLL приложения в память, а затем использовать поиск отражений по всем типам открытых / закрытых / защищенных статических полей.:)

1 голос
/ 25 ноября 2017

Прежде всего вам нужно открыть Find in Files окна из меню Edit->Find and Replace->Find in Files или сочетания клавиш Ctrl + Shift + F.

Затем вам нужно использовать эти регулярные выражения для поиска всех ваших статических переменных вCurrent Project или в Entire Solution:

static \w*[ \t]*\b(\w+|[\w-[0-9]]\w)\b[ \t]+\b(\w+|[\w-[0-9]]\w*)\b[ \t]*[=;]

Проверьте флажок Use Regular Expressions в разделе Find options.

Это регулярное выражение также поддерживает readonly, virtual, ...

1 голос
/ 11 февраля 2012

Самый простой способ найти все ваши статические поля в одном месте, вероятно, будет через панель Class View в Visual Studio (Ctrl + W, C по умолчанию в режиме C # - также в меню w View).

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

В качестве альтернативы, вы можете создать программу, которая использует отражение, чтобы вытащить каждое статическое поле и проверить его атрибуты.Если ThreadStaticAttribute среди них нет, пусть выложит сообщение.(Это соответствует другому ответу, из которого вы могли бы получить более подробную информацию.)

...