FxCop,查找";如果Else";声明

本文关键字:quot Else 声明 如果 FxCop 查找 | 更新日期: 2023-09-27 18:00:51

我正在使用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语句并确定其中的表达式没有任何函数调用?

FxCop,查找";如果Else";声明

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

在创建规则时,我发现一个非常宝贵的工具是使用这里的内省器。它允许您浏览代码树,在执行过程中显示注释类型和属性。创建一个包含if语句的程序,然后展开直到看到,然后查看应该检查的属性。

我会覆盖visit分支方法,设置一个bool,然后访问"条件节点",然后重置它。然后,在您的visitbinary中,只有在设置了布尔(即,您处于分支语句的条件下(时,才能应用您的规则。