2014-09-23 3 views
1

I нижеследующий код сниппет.В чем разница между этими двумя подходами?

bool b = false; 
if (b) {} 

, но я видел много людей пишут что-то вроде:

if (true == b){} 

Они оба выглядят так же для меня, есть ли разница здесь?

+0

Да, второй вычисляется, если логическое значение равно первому булевому, и применяя оператор if из результата этого ... конечно, компилятор, вероятно, сначала удаляет этот шаг – Sayse

+0

. Кстати, я считаю, что хорошая практика - это либо для записи if (b) или if (b! = false) - в случае типа bool, если (b == true) тоже нормально, но только по историческим причинам (в C, когда истина была определена обычно просто как «not 0») мне кажется немного «чище» ... но опять же, в C#, если (b == true), конечно, нормально, если b гарантируется, что это bool –

+0

, это все о читаемости и стиле программист –

ответ

4
bool b; 
if (b) {} 

Вы не можете использовать это, потому что компилятор C# не позволяет использовать неназначенные локальные переменные.

С другой стороны, нет никакой разницы между

bool b = true; 
if (b) {} 

и

bool b = true; 
if (true == b){} 

Они генерируют же MSIL код, а также. Но, на мой взгляд, проверка равенства во втором примере не нужна. Вот почему if(b) кажется чище, чем if(true == b).

0

Нет, нет никакой разницы. (ну, кроме числа типизированных букв, я полагаю).

bool b = true; //ensure you initialise it though!! (if it was **C** you wouldn't think not to!) 

So;

if(b) 
{ 
//doSomthing... 
} 

означает

if(true) 
{ 
//doSomething... 
} 

Однако

, если б был назначен ложным, то, если заявление будет пропущен; как так:

bool b = false; 
if(b) 
{ 
//this won't be executed since b is false 
} 

Что касается вашего вопроса, хотя, с вас инициализацией б в начале, то да, они будут такими же

+0

Да, есть разница, как объяснено в моем комментарии, и никакое 'if (b)' не означает, что это означает, что «если b истинно» – Sayse

+0

, если b присвоено значение true, тогда да, это означает, что если (правда), не так ли? – 2014-09-23 10:17:11

+0

Нет, это не так, потому что b можно переназначить на false, который пропустит оператор if, 'if (true)' всегда будет вводить оператор. – Sayse

0

Для меня

if (true == b){} 

является совершенно неэлегантный. После этого стиля вместо

if (a == b){} 

вы должны положить

if ((a == b) == true){} 

и так далее ....

0

if заявление необходимо логическое выражение (условие), чтобы быть в true чтобы выполнить инструкции внутри своего блока. Если вы сравниваете логическое значение с другим логическим значением, вы все равно получаете логический результат, но, если вы не сравниваете две логические переменные с неизвестным значением, вы можете написать фрагмент бесполезного кода. Чтобы лучше объяснить себе:

bool a, b; 

// some computation 

if(a == b) 
{ 
    // do stuff 
} 

имеет смысл, в то время как

bool a; 

// some computation 

if(a == true) 
{ 
    // do stuff 
} 

содержит некоторый бесполезный код (по-моему, он даже теряет некоторую читаемость), потому что это эквивалент:

bool a; 

// some computation 

if(a) 
{ 
    // do stuff 
} 
0

Код:

bool b = true; 
if (b) 
    Console.WriteLine("b-ok"); 
if (b==true) 
    Console.WriteLine("b-true"); 

если проверить IL-код для первой если

IL_000b: ldloc.0 
IL_000c: ldc.i4.0 
IL_000d: ceq 
IL_000f: stloc.1 
IL_0010: ldloc.1    
IL_0011: brtrue.s IL_001e 
IL_0013: ldstr  "b-ok" 
IL_0018: call  void [mscorlib]System.Console::WriteLine(string) 
IL_001d: nop 

и для второго если

IL_001e: ldloc.0 
IL_001f: ldc.i4.0 
IL_0020: ceq 
IL_0022: stloc.1 
IL_0023: ldloc.1 
IL_0024: brtrue.s IL_0031 
IL_0026: ldstr  "b-true" 
IL_002b: call  void [mscorlib]System.Console::WriteLine(string) 
IL_0031: .... 

Мы можем ясно видеть, что C# компилятор выдает тот же IL-код для обоих операторов. Таким образом, оба подхода абсолютно одинаковы.

Смежные вопросы