Так как в первой форме используются операторы C # 2 против 1, она может компилироваться в большее количество кода CIL, хотя в большинстве случаев большинство будет сталкиваться, вероятно, она не будет иметь значительный размер кода или разница в производительности.
Что может существенно повлиять на читаемость и, следовательно, вероятность ошибок при записи / изменении. Я бы (и вы, Шелдоны, возможно, захотите закрыть глаза сейчас), избегал бы использования "!" Оператор com-PLETELY. "Задыхайся! Мое - СЛОВО!" Да, я сказал это. И Я ЭТО ЗНАЧУ! Со страстью! Его слишком легко пропустить, так как он часто рядом с похожим символом пунктуации (то есть "(" или "||") слева и похожим на него идентификатором буквы (т.е. "l" или "I") справа И пропустить это может иметь ОСНОВНЫЕ последствия, так как это будет означать, что вы думаете, что код делает ТОЧНОЕ ПРОТИВОПОЛОЖНОЕ из того, что он делает на самом деле! АДА.
Рассмотрим следующий весьма вероятный пример:
if (!IsIisServerConnected)
if (IsOfflineMode || !(IsIisLocalServerConnected || IsIisCloudServerConnected))
Я бы вместо этого написал следующее:
if (false == IsIisServerConnected)
if
(
IsOfflineMode
||
(
false ==
(
IsIisLocalServerConnected
|| IsIisCloudServerConnected
)
)
)
Или в вашем случае:
if (false == (foo == null))
Помните, что C (язык, от которого C #, C ++, JavaScript, Java и многие другие популярные в настоящее время языки в конечном итоге унаследовали их синтаксис basic ) был создан в то время, когда Punch Cards были все еще распространены. В современных процессорах, оперативной памяти, мониторах и IDE (этот фрагмент «false.Equals (?)» Может быть сгенерирован с помощью пользовательского сочетания клавиш), для большинства людей для большинства приложений удобочитаемость очень, очень, ОЧЕНЬ (я уже говорил) намного "?) важнее, чем сохранение нескольких символов кода.
P.S. Вы также можете добавить метод расширения в Boolean
Struct, вызывая его, о, я не знаю, Not
! ; D Чтобы ты мог написать:
if (IsIisServerConnected.Not())
if ((foo == null).Not())