2014-05-09 39 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語言編寫。 –

相關問題