我想与多个线程并行运行命令行程序的某些部分,我担心可能会有一些静态变量,我必须修复(例如,通过使其成为[ThreadStatic]
)。在我的项目中是否有任何工具或简单方法可以找到这些?
当然,简单地搜索"static"
并没有多大帮助:我有很多静态方法可以很好地工作并且可以使用任意数量的线程
答案 0 :(得分:12)
注意: 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
答案 1 :(得分:11)
在Visual Studio中使用regexp选项搜索文件static:b+:i:b+:i:b*[=;]
应该为您打开静态变量。它还会带来运营商==
,但它们应该相对容易过滤掉。
答案 2 :(得分:3)
除了IDE技巧之外,真正的战士方法是使用Assembly.Load()
将应用程序DLL加载到内存中,然后使用反射搜索所有类型的公共/私有/受保护静态字段。
:)
答案 3 :(得分:1)
在一个地方找到所有静态字段的最简单方法可能是通过Visual Studio中的“类视图”面板(默认情况下在{C#模式下Ctrl + W, C
- 也可以在View
下查找菜单)。
您可以设置一些原始过滤器。不幸的是,静态不是其中之一。但是,您可以根据编码风格使用可用的过滤器来缩小结果。
或者,您可以创建一个使用反射的程序来提取每个静态字段并检查其属性。如果ThreadStaticAttribute
不在其中,请让它吐出一条消息。 (这与另一个答案相符,您可以从中获得更多详细信息。)
答案 4 :(得分:1)
首先,您必须从Find in Files
菜单或Ctrl + Shift + F快捷键打开Edit->Find and Replace->Find in Files
个窗口。
然后你必须使用这个正则表达式来搜索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,...