FxCop,查找“If-Else”语句

时间:2011-06-30 13:40:15

标签: c# expression fxcop if-statement

我正在使用FxCop并编码以下内容:

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语句并确定里面的表达式没有任何函数调用?

1 个答案:

答案 0 :(得分:1)

您需要查找Branch节点类型,然后查看condition属性。

我在创建规则时发现的一个工具非常宝贵,它使用了找到的内省运算符here。它允许您浏览代码树,随时显示注释类型和属性。创建一个带有if语句的程序,然后展开直到看到a,然后看看你应该检查的属性。

我会覆盖访问分支方法,设置一个bool,然后访问'条件节点',然后重置它。然后在你的访问二进制文件中,只有在设置了bool时才能应用你的规则(即你处于分支声明的状态)。