I нижеследующий код сниппет.В чем разница между этими двумя подходами?
bool b = false;
if (b) {}
, но я видел много людей пишут что-то вроде:
if (true == b){}
Они оба выглядят так же для меня, есть ли разница здесь?
I нижеследующий код сниппет.В чем разница между этими двумя подходами?
bool b = false;
if (b) {}
, но я видел много людей пишут что-то вроде:
if (true == b){}
Они оба выглядят так же для меня, есть ли разница здесь?
bool b;
if (b) {}
Вы не можете использовать это, потому что компилятор C# не позволяет использовать неназначенные локальные переменные.
С другой стороны, нет никакой разницы между
bool b = true;
if (b) {}
и
bool b = true;
if (true == b){}
Они генерируют же MSIL код, а также. Но, на мой взгляд, проверка равенства во втором примере не нужна. Вот почему if(b)
кажется чище, чем if(true == b)
.
Нет, нет никакой разницы. (ну, кроме числа типизированных букв, я полагаю).
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
}
Что касается вашего вопроса, хотя, с вас инициализацией б в начале, то да, они будут такими же
Да, есть разница, как объяснено в моем комментарии, и никакое 'if (b)' не означает, что это означает, что «если b истинно» – Sayse
, если b присвоено значение true, тогда да, это означает, что если (правда), не так ли? – 2014-09-23 10:17:11
Нет, это не так, потому что b можно переназначить на false, который пропустит оператор if, 'if (true)' всегда будет вводить оператор. – Sayse
Для меня
if (true == b){}
является совершенно неэлегантный. После этого стиля вместо
if (a == b){}
вы должны положить
if ((a == b) == true){}
и так далее ....
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
}
Код:
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-код для обоих операторов. Таким образом, оба подхода абсолютно одинаковы.
Да, второй вычисляется, если логическое значение равно первому булевому, и применяя оператор if из результата этого ... конечно, компилятор, вероятно, сначала удаляет этот шаг – Sayse
. Кстати, я считаю, что хорошая практика - это либо для записи if (b) или if (b! = false) - в случае типа bool, если (b == true) тоже нормально, но только по историческим причинам (в C, когда истина была определена обычно просто как «not 0») мне кажется немного «чище» ... но опять же, в C#, если (b == true), конечно, нормально, если b гарантируется, что это bool –
, это все о читаемости и стиле программист –