Это проблема приоритета. Ваше заявление:
"The answer is: " + element.InnerHtml !=null ? element.InnerHtml : ...
следует оценивать как:
"The answer is: " + (element.InnerHtml !=null ? element.InnerHtml : ...)
<------------------- this first ------------------->
но на самом деле оценивается как:
("The answer is: " + element.InnerHtml) !=null ? element.InnerHtml : ...
<------------- this first ------------>
Последнее выражение всегда будет истинным, начиная с "string" + anything != null
, поэтому вы всегда получите только element.InnerHtml
(<br>)
.
Причина, по которой у вас нет проблемы в первом тесте, заключается в том, что вы оцениваете val
отдельно, следовательно, вручную контролируя приоритет.
Кроме того, мне нравится, как люди, кажется, полагают, что они обнаружили ошибку в программном обеспечении, используемом неисчислимыми миллионами других людей, вместо того, чтобы рассматривать малейшую вероятность того, что они, возможно, сделали что-то не так: - )
Хотя, если честно, я обнаружил ошибки в одном продукте, который использовался многими людьми (компилятор Microsoft COBOL, если я правильно помню), но это было из-за проблем со знаком / без знака, и у меня была одна из самых ранних машин с более чем 512 КБ ОЗУ (где проверен код запуска, чтобы убедиться, что у вас достаточно памяти, и он обработал 640 КБ как некоторое отрицательное значение).
Тем не менее, одна ошибка, обнаруженная за четверть века, довольно незначительна, так что не стоит предполагать, что программное обеспечение немедленно ошибается. Моей первой мыслью всегда было то, что я как-то все испортил (и, к моему большому сожалению, я прав).