Подтвердить что ты не робот

Использование if (! Bool) vs if (bool = false) в С#

Есть ли какой-либо стиль консенсуса в отношении следующих двух стилей кодирования? Мне более любопытно, если это то, что обычно предпочитают в хорошем коде на С#, или если это то, что определяется при выборе стиля для проекта кодирования.

Стиль 1: Использование! знак, чтобы указать не в условном

if (!myBool)
{
  //Do Stuff...
}

Стиль 2: Использование == false для указания проверки ложности в условном

if (myBool == false)
{
  //Do Stuff...
} 

Спасибо!

4b9b3361

Ответ 1

Нормальное соглашение

if (!myBool)

В одном месте, где я не прохожу этот маршрут, используется значение nullable booleans. В этом случае я сделаю

if (myBool == true)
{

}

Что эквивалентно

if (myBool.HasValue && myBool.Value)

Ответ 2

Я не знаю ни одного языка, для которого последний предпочтительнее. Используйте первый.

Внимание!

Есть причина для этого!

Это действительно делает то, что вы ожидаете, на большинстве языков:

if (x == false)
    ...

Но, например, С++, потому что true является просто синонимом для 1 (поэтому 2 не является истинным или ложным), этот не работает:

if (x != true)
    ...

хотя это хорошо в С#.

На самом деле, он также может оказаться сложным в .NET - вы можете обмануть логическое значение для получения целочисленного значения и испортить его с поразрядной арифметикой (например, a & b может быть ложным, если a равно 1 и b равно 2, хотя оба являются "истинными" ).

В общем, просто используйте первое, а не беспокоиться о булевых литералах.

Ответ 3

if(!myBool)
{
  // Do Stuff here...
}

Это предпочтительная версия, поскольку, поскольку у вас уже есть переменная bool, которая содержит истину или ложь, нет причин делать дополнительную оценку в инструкции if.

Update:

Основываясь на том, что сказал aquinas, этот формат хорош для использования, если у вас нет нулевого значения boolean (ex: bool? myBool). Если это так, используйте первое:

bool? myBool
if (myBool == false)
{
  // Do stuff here...
}