为什么CLR会改变我的代码含义?

时间:2014-05-09 07:57:31

标签: .net vb.net clr reverse-engineering cil

我们正在进行项目,我们已经完成了很多版本(SVN)和很多人的工作。我们的客户提出了一个问题,我们已经在某天修复了代码。所以我想弄清楚,如果我们在客户端站点发送了正确的版本。在检查了很多东西之后,我发现在客户端反转代码以查看实际代码是最容易的。所以我使用Reflector做到了。

VB.Net代码,

Case RequestState.FirstComplete 'RequestState.FirstComplete = 2
Request.Time = Now

If ErrorCode = ProcessErrors.NONE OrElse ProcessErrors.SUBSCRIBER_BUSY_FOR_MT_SMS Then
'OrElse ErrorCode = ProcessErrors.EQUIPMENT_PROTOCOL_ERROR

NextStep(Id, GetDPC(id), NUMBER)

反向代码,

case 2:
{
  request.Time = DateAndTime.Now;
  if (errorCode == 0)
  {

  }

  NextStep(invokeId, ref GetDPC(id), ref NUMBER);    
}

现在我无法理解这种过度简化。怎么来,

If ErrorCode = ProcessErrors.NONE OrElse ProcessErrors.SUBSCRIBER_BUSY_FOR_MT_SMS Then

变为

if (errorCode == 0)
{
}

1 个答案:

答案 0 :(得分:4)

因为您的原始代码不正确

应该是

If ErrorCode = ProcessErrors.NONE OrElse ErrorCode = ProcessErrors.SUBSCRIBER_BUSY_FOR_MT_SMS Then
                                         ^^^^^^^^^^^^

您无法使用OrElse来测试某个值(ErrorCode)是否其他两个值中的一个