2012-02-10 17 views
12

Chcę uruchomić pewną część mojego programu wiersza poleceń równolegle z wieloma wątkami i obawiam się, że może pozostać jakaś zmienna statyczna, którą muszę naprawić (np. Wykonując ją jako [ThreadStatic]). Czy istnieje jakieś narzędzie lub prosty sposób na znalezienie ich w moim projekcie?Jak mogę znaleźć wszystkie zmienne statyczne w moim projekcie C#?

Oczywiście po prostu szukając "static" nie pomaga: Mam wiele metod statycznych, które działają świetnie i finde z dowolnej liczby wątków

+3

można oczywiście użyć refleksji na temat swojego zespołu. Ale nie wiem, czy to byłoby tak, jakby spychać buldożer na podwórko. – user492238

+1

Jestem za podejściem do spychacza. – Zenexer

Odpowiedz

11

Wyszukiwanie plików dla opcji static:b+:i:b+:i:b*[=;] za pomocą opcji regexp w programie Visual Studio powinno spowodować zmianę zmiennych statycznych. Przyniesie to także operatorom ==, ale powinny one być względnie łatwe do odfiltrowania wizualnie.

+3

Ooo, czekaj, to fajna sztuczka. Myślę, że działałoby to z kilkoma fałszywymi pozytywami. +1 – Zenexer

+1

Awesome! Dzięki! Działa bardzo dobrze! – Christian

1

Najprostszym sposobem na znalezienie wszystkich pól statycznych w jednym miejscu, jest prawdopodobne, będzie dostępny za pośrednictwem panelu Widok klasy w Visual Studio (Ctrl + W, C domyślnie w trybie C# - również pod menu View).

Można ustawić niektóre filtry pierwotne. Niestety, statyczne nie jest jednym z nich. Możesz jednak użyć dostępnych filtrów, aby zmniejszyć wyniki, w oparciu o styl kodowania.

Można również utworzyć program, który używa odbicia, aby wyciągnąć każde pole statyczne i sprawdzić jego atrybuty. Jeśli nie ma wśród nich ThreadStaticAttribute, niech wypisze komunikat. (Jest to zgodne z kolejną odpowiedzią, z której możesz uzyskać więcej szczegółów.)

3

Oprócz sztuczek IDE prawdziwym sposobem wojownika byłoby użycie Assembly.Load() do załadowania biblioteki DLL aplikacji do pamięci, a następnie użycia wyszukiwania refleksji przez wszystkie typy publicznych/prywatnych/chronionych pól statycznych. :)

+1

Następnie sprawdź niestandardowe atrybuty, aby sprawdzić, czy brakuje 'ThreadStaticAttribute'. Jeśli tak, to czerwone flagi. – Zenexer

11

Uwaga: Odpowiedź dasblinkenlight działa tylko w Visual Studio 2010 i starszym.

Poniżej znajduje się tłumaczenie dla Visual Studio 2012 i nowsze:

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

Tłumaczenie zostało dokonane bazowania: http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx

+2

Nawiasem mówiąc, w celu rozwiązania problemu, który powyższy będzie brakować jakichkolwiek dodatkowo ozdobionych członków, użyj następującego niemożliwie trudne do odczytania, ale skuteczne regex: '(statyczne (? ([^ \ R \ n]) \ s) + (\ b (_ \ w + | [\ w- [0-9 _]] \ w *) \ b) (? ([^ \ r \ n]) \ s) + (\ b (_ \ w + | [\ w- [0-9 _]] \ w *) \ b) (? ([^ \ r \ n]) \ s) * [=;]) | (static (? ([^ \ r \ n]) \ s) + (\ b (_ \ w + | [\ w- [0-9 _]] \ w *) \ b) (? ([^ \ r \ n]) \ s) + (\ b (_ \ w + | [\ w- [0-9 _]] \ w *) \ b) (? ([^ \ r \ n]) \ s) + (\ b (_ \ w + | [\ w- [0-9_] ] \ w *) \ b) (? ([^ \ r \ n]) \ s) * [=;]) ' –

+1

Ponownie przeprowadź dla wygody i nie miej problemów z kopiowaniem/wklejaniem: http://refiddle.com/ hhg –

+0

To nie działa na polach typów ogólnych, takich jak Słownik . –

1

Przede wszystkim trzeba otworzyć Find in Files okna z Edit->Find and Replace->Find in Files menu lub Ctrl + Shift + F - klawisze skrótów.

Następnie trzeba użyć tego wyrażenia regularnego, aby wyszukać wszystkie twój zmiennych statycznych w Current Project lub w Entire Solution:

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

umysł zaznaczyć opcję Use Regular Expressions w Find options sekcji.

To wyrażenie również obsługuje tylko do odczytu, wirtualny, ...