c #: можете ли вы использовать логический предикат в качестве параметра оператора if? - PullRequest
0 голосов
/ 06 мая 2010

В C # вы можете использовать логический предикат сам по себе в качестве параметра для оператора if?

например:

string str = "HELLO";
if (str.Equals("HELLO"))
{
    Console.WriteLine("HELLO");
}

Будет ли этот код выводить "HELLO" или он должен быть:

string str = "HELLO";
if (str.Equals("HELLO") == true)
{
    Console.WriteLine("HELLO");
}

Если что-то не так с вышеуказанными сегментами кода, укажите это.

РЕДАКТИРОВАТЬ: двойные равны согласно ответам

Ответы [ 6 ]

4 голосов
/ 06 мая 2010

Ну, последний фрагмент даже не скомпилируется, потому что он пытается присвоить true str.Equals("Hello") (у вас есть один = вместо ==), но либо:

if (str.Equals("HELLO"))

или

if (str.Equals("HELLO") == true)

будет работать. Хотя последний очень обескуражен - он довольно уродливый.

Имейте в виду, что строка перегружается ==, так что вы можете написать:

if (str == "HELLO")

что несколько проще.

3 голосов
/ 06 мая 2010

Вторая версия даже не скомпилируется, так как вам нужно ==, а не =.

Вид кода, как if (foo == true), заставляет желчь подниматься ко мне в рот.

2 голосов
/ 06 мая 2010

можете ли вы использовать логический предикат самостоятельно в качестве параметра для оператора if

Строго говоря, ответом на this является 'нет', поскольку предикат представляет собой функцию (в математическом смысле). может *1011* использовать для условного выражения в if любое логическое выражение , включая (как здесь) результат вызова предиката в значение.

Чтобы расширить, «предикат» здесь равен «ПРИВЕТ». Это функция (в математическом смысле), которая работает со значениями типа string и возвращает логические значения. Как только вы получили логическое значение (применяя эту функцию к определенной строке, str), вам не нужно явно сравнивать его с true: вы можете просто использовать его.

Как вы увидите из ответов других, код, в котором выражения булевого типа явно сравниваются с булевыми литералами, часто вызывает у читателя боль в стиле кода :) (Моя «любимая» мозоль <boolean expression> ? true : false).

2 голосов
/ 06 мая 2010

Код у вас правильный, оператор if проверяет, имеет ли оператор в скобках значение true.

Помните, что для сравнения в c # используется == не =, поэтому оно должно быть if (x == true)

Это может быть использовано в других ситуациях, таких как:

bool isACat = true;

if (isACat)
{
}

Хорошей практикой является указание is или аналогичного идентификатора (Is / Has / Should / Will / Do / Must ...) перед логическими именами переменных, поскольку это облегчает чтение при не используют == true.

2 голосов
/ 06 мая 2010

Да, вы можете.

(ваш второй пример нуждается в 2 = (то есть ==), чтобы быть правильным).

0 голосов
/ 06 мая 2010

В этом нет ничего плохого.

Просто два разных способа собрать одну и ту же ложку, чтобы накормить себя;)

...