您可以使用custom paterns进行代码检查。在Visual Studio中,转到选项,Resharper。在“代码检查”类别下找到“自定义模式”。您可以在许多内置检查之上添加自己的代码片段。
得到你想要的最简单方法是下一段文字保存到一个XML文件:
<CustomPatterns>
<Pattern Severity="SUGGESTION" FormatAfterReplace="True" ShortenReferences="True" Language="CSHARP">
<Comment>Event call is not thread-safe</Comment>
<ReplaceComment>Convert to thread-safe event call</ReplaceComment>
<ReplacePattern><![CDATA[var eventHandler = $SomeEvent$;
if (null != eventHandler)
{
eventHandler($args$);
}
]]></ReplacePattern>
<SearchPattern><![CDATA[if ($SomeEvent$ != null)
{
$SomeEvent$ ($args$);
}
]]></SearchPattern>
<Params>
<IgnoreBracesInSingleStatementBlocks>False</IgnoreBracesInSingleStatementBlocks>
<IgnoreParanthesisInExpressions>False</IgnoreParanthesisInExpressions>
<SmartMatchAssociativeExpressions>False</SmartMatchAssociativeExpressions>
<TreatReversedBinaryExpressionsEquivalent>Never</TreatReversedBinaryExpressionsEquivalent>
</Params>
<Placeholders>
<ArgumentPlaceholder Name="args" Minimal="-1" Maximal="-1" />
<ExpressionPlaceholder Name="SomeEvent" ExpressionType="System.EventHandler" ExactType="False" />
</Placeholders>
</Pattern>
</CustomPatterns>
,并使用导入功能的代码检查。你可以看到我做了什么,并通过实例学习。
这会给你一个VS中的resharper提示和一个无论发生哪种模式的修复建议。您可以使用“立即查找”查找所有搜索模式的出现。
一个大但(可悲)。固定模式也被认为是一个嫌疑犯。解决这个问题的唯一方法就像我现在看到的那样,是让搜索模式变得不那么通用。
编辑:
我不喜欢我的最后的评论,所以我试图做一些事情毕竟。我改变了XML,现在它工作。诀窍是在替换代码(if (null != eventHandler)
)中反转比较并关闭“匹配类似结构”。我已经开始自己使用这个代码检查,它实际上是一个好主意!
我不记得检查的原因(即将事件分配给临时变量) - 为什么? – wal