2011-06-30 30 views
0

我使用的FxCop和編碼如下:的FxCop,查找「的if-else」語句

public override void VisitBinaryExpression(BinaryExpression binaryExpression) 
{ 
    if (binaryExpression != null) 
    { 
     if (binaryExpression.Operand1 is MethodCall || binaryExpression.Operand2 is MethodCall) 
     { 
      Problem p = new Problem(GetResolution(null), binaryExpression); 
      this.Problems.Add(p); 
     } 
    } 
    base.VisitBinaryExpression(binaryExpression); 
} 

然而,另外也被認爲是一個二進制表達式了。我試圖阻止:

if (myFunc()){ 
// cool code 
} 

而且使用這個來代替:

bool b = myFunc(); 
if (b){ 
// cool code 
} 

我怎樣才能找到的FxCop的if-else語句,並確定該表達式中沒有任何函數調用?

+4

這是什麼問題? – MrFox

+0

你爲什麼要阻止它? – Kibbee

+0

@MFFOX,增加了問題 – Mustafa

回答

1

您需要查找分支節點類型,然後查看條件屬性。

我在創建規則時發現了一個非常寶貴的工具,它使用的是introspector here。它允許您瀏覽代碼樹,隨時顯示註釋類型和屬性。用if語句創建一個程序,然後展開,直到你看到一個,然後看看你應該檢查的屬性。

我會重寫訪問分支方法,設置一個布爾值,然後訪問'條件節點',然後重置它。然後在你的訪問者列表中,你只能在布爾值被設置的情況下應用你的規則(即你處於分支語句的狀態)。

+0

我沒有實現它,但我認爲這是最好的解決方案。 – Mustafa