2015-07-20 65 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