您可以使用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