Я конвертирую старое приложение 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();
}
'ЬурейеЕ CheckMessage * MessagePtr;' определяется между '' CheckMessage' и классов CheckMessageList', что я работаю. Итак, для C#, который в основном будет таким же, как 'while (message! = Null)'? – sab669
Да, это так. – CoryKramer
Стоит также упомянуть: почти все встроенные типы имеют неявное преобразование в 'bool', которое сравнивается с нулем. Для типов указателей и типов-указателей нуль, как правило, оценивается как «nullptr» (C# 'null'). Для целых типов типы с плавающей запятой, типы перечисления, сравнение с нолем все еще доступно неявно. 'a && b' означает то же самое, что и' a! = 0 && b! = 0' для всех встроенных типов. – hvd