从果壳中的C#
表达式和操作符
表达式本质上表示一个值。
...
无效表达
void表达式是没有值的表达式。例如:
Console.WriteLine (1)
void表达式,因为它没有值,不能用作操作数 构建更复杂的表达式:
1 + Console.WriteLine (1) // Compile-time error
感谢。
阅读Eric Lippert给Can a C# lambda expression ever return void?的答案后,正如Rufus L在评论中指出的那样,我有以下问题:
对方法的调用总是一个表达式,其值是方法返回的值吗?
是一个void表达式,总是调用返回void的方法?
答案 0 :(得分:4)
由于void表达式是一个表达式,它必须表示一个值。但它怎么“没有价值”呢?
该陈述是错误的。表达式不需要“表示值”。
大多数表达都这样做。有些人没有。特别是:
被归类为“无”的表达,因为它们是对返回空白的方法的调用
in,比如System.Console.WriteLine("")
我们有表达式System
表示名称空间而不是值,表达式System.Console
表示类型,而不是值。< / p>
在x[1] = 123;
中,x[1]
表示变量或设置访问者,而不是值
在C#7中,您现在可以在需要表达式的上下文中使用throw
,但它没有值。
等等。有许多表达不表示值;你能想到更多吗?
Albahari正在为教学目的进行简化。有关如何计算表达式的确切定义,请阅读规范。
由于void表达式没有值,因此void表达式是一个语句吗?
没有。
对方法的调用总是一个表达式,其值是方法返回的值吗?
是的,假设该方法返回一个值。
练习:列出方法调用不返回值的所有方式。
是一个void表达式,总是调用返回void的方法吗?
是
“不返回值的方法”和“返回无效的方法”之间有什么区别?
返回void的方法不返回值。但是有非void方法不返回值。你能写一个吗?
“对不返回值的方法的调用不是表达式”
该陈述是错误的。所有方法调用都是表达式,无论它们是否返回值。
对返回void的方法的调用是一个void表达式
这是正确的。
你真的应该阅读规范。这很精确。