2014-05-09 34 views
0

我们正在项目中完成许多版本(SVN)和许多人的工作。我们的客户提出了问题,我们已经在代码的某一天已经修复了这个问题。所以我想弄清楚,如果我们已经在客户端发送了正确的版本。在检查了很多事情之后,我发现在客户端反转代码以查看实际代码是最容易的。所以我用反射器做了。为什么CLR会改变我的代码的含义?

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

我猜'NONE'和'SUBSCRIBER_BUSY_FOR_MT_SMS'都有数字'0'。 –

+0

不,NONE是0而SUBSCRIBER_BUSY_FOR_MT_SMS是31 –

+1

这不是CLR改变你的代码,它是编译器。 CLR是通用语言*运行时*。 –

回答

4

因为你原来的代码不正确

应该

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

不能使用OrElse来测试,如果某个值(ErrorCode)是另外两个值的之一。

+0

我在VB.net中不行。你能解释OP的代码是什么意思吗? –

+2

@SriramSakthivel他们都不是我的。他的代码没有意义,因为(据我了解),它将自己评估“ProcessErrors.SUBSCRIBER_BUSY_FOR_MT_SMS”为布尔*,而不是用'ErrorCode'检查是否相等。但是,因为它不是零,所以我希望等于'If ErrorCode = 0 OrElse True',这将是'If True'。所以我不确定。 –

+0

'OrElse'是[相当于](http://www.tangiblesoftwaresolutions.com/Articles/Logical%20Operator%20Equivalents%20in%20VB%20and%20CSharp.html)'||'用C语言编写。 –

相关问题