为什么我们不能在if语句中写Console.Writeline()?

3

为什么我们不能在 C#if 条件语句中写 Console.Writeline() ,但却可以在 C 中写 printf() 语句?


6
因为printf返回一个可测试的值,而WriteLine不会。 - Some programmer dude
@al-Acme 我猜他/她是指在条件中而不是在主体内。 - Pazza22
@Pazza22 是的,我后来意识到了。 - Sadique
3个回答

15

printf函数在C语言中的返回类型是int,表示写入的字符数量。

而在C语言中,if语句的条件可以是任何非void数据类型。

与此不同,C#和.NET中的Console.WriteLine函数的返回类型是voidif语句中的条件必须是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;
    }
}

你可以在 if 语句中使用 Console.WriteLine

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

-1
可以说,C#C语言的演化产物。在C#中,重点是使代码更加逻辑和可读性。C更接近于汇编语言,这是硬件能理解的唯一语言。在C#中,在IF语句中使用非布尔运算是没有意义的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接