2015-02-05 2 views
3

Почему мы не можем написать Console.Writeline() in if Состояние в C#? Но мы можем написать printf() заявление в если состояние в C?Почему мы не можем писать Console.Writeline() в инструкции if?

+6

Поскольку ['printf'] (http://en.cppreference.com/w/c/io/fprintf) возвращает значение, которое можно протестировать, и [' WriteLine'] (https://msdn.microsoft .com/en-us/library/system.console.writeline% 28v = vs.110% 29.aspx). –

+1

Отправьте свой код. – LPs

+0

@ al-Acme Я предполагаю, что он/она имел в виду в состоянии, а не внутри тела. – Pazza22

ответ

15

В С, тип возврата printf - int - количество написанных символов.

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

Сравните это с C# и .NET, где Console.WriteLine имеет тип возвращаемого void, и условия в качестве if заявление сусло иметь тип bool (или неявно конвертируются в bool). (Таким образом, даже если Console.WriteLine вернулся int, вы все равно нужно что-то вроде if (Console.WriteLine(...) != 0) для того, чтобы сделать его действительным.)

Что вы хотите, чтобы состояние на самом деле проверить? Если Console.WriteLine не может по какой-то причине, он будет бросать исключение в любом случае ...

-1

Просто для удовольствия, вы можете использовать вспомогательный класс:

public static class True 
{ 
    public static bool Invoke(Action action) 
    { 
     action(); 
     return true; 
    } 
} 

И вы можете использовать Console.WriteLine в if заявлении:

if (myConditions && True.Invoke(() => Console.WriteLine(@"myConditions is true"))) 
{ 
    // do smth 
} 
-1

Можно с уверенностью сказать, что C# является результатом эволюции C Язык. В C# фокус состоит в том, чтобы сделать код более логичным и читаемым. C более логичен для Ассемблер, только язык, который аппаратное обеспечение понимает. Не имеет смысла иметь небулевую операцию в IF заявление в C#.

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