2011-06-30 7 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

@MrFox、質問を追加 – Mustafa

答えて

1

分岐ノードタイプを探してから、条件プロパティを調べる必要があります。

ルールを作成する際に貴重なツールを使用しているのは、イントロスペクサーがhereであることです。コードツリーを調べて、ノートの種類とプロパティを表示します。 if文を含むプログラムを作成し、次にaが見えるまで展開してから、チェックするべきプロパティを見てください。

訪問分岐メソッドをオーバーライドし、ブールを設定してから、「条件ノード」にアクセスしてから、それをリセットします。次に、あなたの訪問バイナリでは、ブールが設定されている場合(つまり、分岐ステートメントの状態にある場合)にのみルールを適用できます。

+0

私はそれを実装していないが、私はそれが最善の解決策だと思う。 – Mustafa

関連する問題