Ответ 1
Нормальное соглашение
if (!myBool)
В одном месте, где я не прохожу этот маршрут, используется значение nullable booleans. В этом случае я сделаю
if (myBool == true)
{
}
Что эквивалентно
if (myBool.HasValue && myBool.Value)
Есть ли какой-либо стиль консенсуса в отношении следующих двух стилей кодирования? Мне более любопытно, если это то, что обычно предпочитают в хорошем коде на С#, или если это то, что определяется при выборе стиля для проекта кодирования.
Стиль 1: Использование! знак, чтобы указать не в условном
if (!myBool)
{
//Do Stuff...
}
Стиль 2: Использование == false для указания проверки ложности в условном
if (myBool == false)
{
//Do Stuff...
}
Спасибо!
Нормальное соглашение
if (!myBool)
В одном месте, где я не прохожу этот маршрут, используется значение nullable booleans. В этом случае я сделаю
if (myBool == true)
{
}
Что эквивалентно
if (myBool.HasValue && myBool.Value)
Я не знаю ни одного языка, для которого последний предпочтительнее. Используйте первый.
Это действительно делает то, что вы ожидаете, на большинстве языков:
if (x == false)
...
Но, например, С++, потому что true
является просто синонимом для 1 (поэтому 2
не является истинным или ложным), этот не работает:
if (x != true)
...
хотя это хорошо в С#.
На самом деле, он также может оказаться сложным в .NET - вы можете обмануть логическое значение для получения целочисленного значения и испортить его с поразрядной арифметикой (например, a & b
может быть ложным, если a
равно 1 и b
равно 2, хотя оба являются "истинными" ).
В общем, просто используйте первое, а не беспокоиться о булевых литералах.
if(!myBool)
{
// Do Stuff here...
}
Это предпочтительная версия, поскольку, поскольку у вас уже есть переменная bool, которая содержит истину или ложь, нет причин делать дополнительную оценку в инструкции if.
Update:
Основываясь на том, что сказал aquinas, этот формат хорош для использования, если у вас нет нулевого значения boolean (ex: bool? myBool
). Если это так, используйте первое:
bool? myBool
if (myBool == false)
{
// Do stuff here...
}