void表达式没有值吗?

时间:2017-05-29 03:33:21

标签: c#

从果壳中的C#

  

表达式和操作符

     

表达式本质上表示一个值。

     

...

     

无效表达

     

void表达式是没有值的表达式。例如:

Console.WriteLine (1)
     

void表达式,因为它没有值,不能用作操作数   构建更复杂的表达式:

1 + Console.WriteLine (1)      // Compile-time error
  1. 由于void表达式是一个表达式,因此它必须表示一个值。 但它怎么能没有价值"?
  2. 由于void表达式没有值,因此是void表达式a 声明?
  3. 感谢。

    阅读Eric Lippert给Can a C# lambda expression ever return void?的答案后,正如Rufus L在评论中指出的那样,我有以下问题:

    • 对方法的调用总是一个表达式,其值是方法返回的值吗?

    • 是一个void表达式,总是调用返回void的方法?

1 个答案:

答案 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表达式

这是正确的。

你真的应该阅读规范。这很精确。