2015-07-20 134 views
1

我正在將舊的Borland C++應用程序轉換爲C#.NET。如何在C++布爾表達式中評估指針?

這個類看起來像是基本上只是一個雙鏈表。

其中一個方法是這樣的:

MessagePtr CheckMessageList::First(MessageSourceTable _source) 
{ 
    MessagePtr 
    message = First(); 
    bool 
    done = false; 

    while (message && !done) 
    { 
    done = (bool) (message->SourceTable() == _source); 
    if (!done) 
     message = Next(); 
    } 

    return (message); 
} 

我不明白,但如何while (message)評估。

在C#中我有這樣的:

public CheckMessage Fist(enums.MessageSourceTable table) 
{ 
    CheckMessage message = First(); 
    bool done = false; 

    while (message && !done) 
    { 
     done = message.SourceTable.Equals(table); 

     if (!done) 
      message = Next(); 
    } 

    return message; 
} 

這是無效的,因爲它不知道如何處理while語句。

我幾乎沒有使用C++的經驗。任何人都可以將我指向正確的方向嗎?

編輯;這基本上是一樣的嗎?

public CheckMessage Fist(enums.NYMSMessageSourceTable table) 
{ 
    foreach (CheckMessage cm in _list) 
    { 
     if (cm.SourceTable.Equals(table)) 
      return cm; 
    } 

    return Last(); 
} 

回答

4

在C++中的指針有隱式轉換到bool,其中指針爲「falsy」,如果它是等於nullptr和「truthy」否則。所以

while(message) 

相當於

while(message != nullptr) 
+0

'typedef的CheckMessage * MessagePtr;'是'CheckMessage'和'CheckMessageList'類,我的工作之間的定義。那麼對於C#,它基本上和'while(message!= null)'一樣? – sab669

+1

是的,沒錯。 – CoryKramer

+1

值得一提的是:幾乎所有的內置類型都有一個隱式轉換爲'bool'的比較爲零。對於指針類型和指向成員類型的指針,零計算結果爲nullptr(C#'null')。對於整數類型,浮點類型,枚舉類型,與零比較仍然可以隱式使用。對於所有內置類型,'a && b'的含義與'a!= 0 && b!= 0'相同。 – hvd