【问题标题】:Does a void expression has no value?空表达式没有价值吗?
【发布时间】:2017-05-29 12:52:28
【问题描述】:

简而言之,来自 C#

表达式和运算符

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

...

空虚表达式

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

Console.WriteLine (1)

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

1 + Console.WriteLine (1)      // Compile-time error
  1. 由于 void 表达式是一个表达式,它必须表示一个值。 但怎么会“没有价值”呢?
  2. 由于 void 表达式没有值,所以 void 表达式是 声明?

谢谢。


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

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

  • void 表达式是否总是调用返回 void 的方法?

【问题讨论】:

  • 语句和表达式可以被认为是句法结构,而在类型级别上是无效的。所以这里的缺陷是“因为 X 是一个表达式,它必须表示一个值”——这只有在表达式不产生 void 时才成立。 (2) 仅当所有表达式都是语句时才为真。
  • 查看@Eric Lippert 对此问题的回答:stackoverflow.com/questions/2029433/…
  • @RufusL 谢谢。 (1) 带有return 语句的方法是否总是一个表达式,其值是方法中return 语句返回的值? (2) void 表达式总是调用return void 的方法?
  • 是的,听起来不错。除了 void 表达式不 "return void" - 它们根本不 return。但我认为这就是你的意思。
  • @RufusL 我在上一条评论(2)中提出的问题是:void 表达式是否总是调用某个返回 void 的方法?我说的不是void表达式是否返回void,而是它调用的方法是否返回void。

标签: c#


【解决方案1】:

由于 void 表达式是一个表达式,它必须表示一个值。但怎么会“没有价值”呢?

该陈述是错误的。表达式不需要“表示一个值”。

大多数表达式都可以。有些没有。特别是:

  • 表达式被归类为“无”,因为它们调用了返回 void 的方法

  • System.Console.WriteLine("") 中,我们有表达式 System 表示命名空间,而不是值,表达式 System.Console 表示类型,而不是值。

  • x[1] = 123; 中,x[1] 表示 变量set 访问器,而不是

  • 在 C# 7 中,您现在可以在需要表达式但没有值的上下文中使用 throw

等等。有许多表达式不表示值;你能想到更多吗?

Albahari 只是出于教学目的进行了简化。有关如何评估表达式的确切定义,请阅读规范。

既然 void 表达式没有值,那么 void 表达式是语句吗?

没有。

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

是的,假设方法返回一个值。

练习:列出方法调用返回值的所有方式。

void 表达式是否总是调用返回 void 的方法?

是的。

“不返回值的方法”和“返回 void 的方法”有什么区别?

返回 void 的方法不返回值。但是有一些非 void 方法不返回值。你能写一个吗?

“不返回值的方法调用不是表达式”

那句话是错误的。所有方法调用都是表达式,无论是否返回值。

对返回 void 的方法的调用是一个 void 表达式

没错。

您真的应该阅读规范。很准确。

【讨论】:

  • 谢谢。 (1) “不返回值的方法”和“返回 void 的方法”有什么区别? (2) 从您的回复看来,“对不返回值的方法的调用不是表达式”,而“对返回 void 的方法的调用是 void 表达式”。
猜你喜欢
  • 1970-01-01
  • 2021-10-20
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多