而参数类型实际上是系统.布尔,FxCop IL解析器将其视为整数。下面是该规则的简化版本(假设您希望非文本endResponse值触发规则冲突):
public override ProblemCollection Check(Member member)
{
Method method = member as Method;
if (method != null)
{
this.Visit(method.Body);
}
return this.Problems;
}
public override void VisitMethodCall(MethodCall call)
{
base.VisitMethodCall(call);
Method targetMethod = (Method)((MemberBinding)call.Callee).BoundMember;
if (targetMethod.DeclaringType.FullName.Equals("System.Web.HttpResponse", StringComparison.Ordinal) &&
targetMethod.Name.Name.Equals("Redirect", StringComparison.Ordinal))
{
bool callIsAcceptable = false;
if (targetMethod.Parameters.Count == 2)
{
Expression endResponseOperand = call.Operands[1];
if (endResponseOperand.NodeType == NodeType.Literal)
{
if ((int)((Literal)endResponseOperand).Value == 1)
{
callIsAcceptable = true;
}
}
}
if (!callIsAcceptable)
{
this.Problems.Add(new Problem(this.GetResolution(), call));
}
}
}