2015-07-20 4 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; 
} 

Какой недействительна, так как он не знает, как обращаться, что, хотя заявление.

У меня практически нет опыта работы с 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

'ЬурейеЕ CheckMessage * MessagePtr;' определяется между '' CheckMessage' и классов CheckMessageList', что я работаю. Итак, для C#, который в основном будет таким же, как 'while (message! = Null)'? – sab669

+1

Да, это так. – CoryKramer

+1

Стоит также упомянуть: почти все встроенные типы имеют неявное преобразование в 'bool', которое сравнивается с нулем. Для типов указателей и типов-указателей нуль, как правило, оценивается как «nullptr» (C# 'null'). Для целых типов типы с плавающей запятой, типы перечисления, сравнение с нолем все еще доступно неявно. 'a && b' означает то же самое, что и' a! = 0 && b! = 0' для всех встроенных типов. – hvd

Смежные вопросы