我正在使用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语句并确定里面的表达式没有任何函数调用?
答案 0 :(得分:1)
您需要查找Branch节点类型,然后查看condition属性。
我在创建规则时发现的一个工具非常宝贵,它使用了找到的内省运算符here。它允许您浏览代码树,随时显示注释类型和属性。创建一个带有if语句的程序,然后展开直到看到a,然后看看你应该检查的属性。
我会覆盖访问分支方法,设置一个bool,然后访问'条件节点',然后重置它。然后在你的访问二进制文件中,只有在设置了bool时才能应用你的规则(即你处于分支声明的状态)。