【问题标题】:Can you use the "return" statement in C# methods declared as void?您可以在声明为 void 的 C# 方法中使用“return”语句吗?
【发布时间】:2023-03-19 02:54:01
【问题描述】:

在阅读MCSD 学习指南时,我注意到作者说在声明返回类型void 的方法中包含return 语句是非法的。但是,当我创建以下方法时,Visual Studio 没有在编辑器中对其进行标记,也没有编译失败:

private void ReturnNothing()
{
    return;
}

那么真正的答案是什么?这合法吗?

【问题讨论】:

  • 请参阅stackoverflow.com/questions/1283325/… 以获取答案以及支持和反对它的原因。
  • 不要认为它与前 2 个问题完全相同。一点也不。
  • @MarioRossi - 不一定要精确重复...如果该语句在 C# 规范中有效,一个学习 MCSD 的人显然会查找它,所以看起来很完美可以复制。
  • 我不想发布我正在阅读的指南的实际名称,因为我不确定这是否允许并且我不想指责作者发布了不良数据。我只是不确定真正的答案是什么,因为指南说这是非法的,但 Visual Studio 允许我使用它。

标签: c# return void


【解决方案1】:

是的,这绝对是合法的。

只有当你试图在 return 后面加上一个值才是非法的。这是错误的return 0;

【讨论】:

    【解决方案2】:

    作者可能指的是表格

    return value ;
    

    这在返回类型 == void 时实际上是无效的(但在返回类型 != void 时有效且必需)。

    【讨论】:

    • 其实作者在我提到的那个场景之后提到了你的场景。
    • @MarioRossi 我只在第四章,我已经发现了一些错别字,但这个错误似乎很重要,可以忽略。这就是我决定就 SO 征求意见的原因。
    • 非 void 方法的要求是 (1) 所有return 语句都有一个可转换为返回类型的表达式,以及 (2)该方法无法访问。这在逻辑上并不意味着非 void 方法必须有返回值! int Foo() { throw new NotImplementedException(); } 满足这两个要求;可能的零返回语句中的零具有可转换为int 的表达式,并且终点不可到达,因此是合法的。
    • @EricLippert 是的,没错。我不知道如何在不分散他/她对解释核心的注意力的情况下将其呈现给刚刚学习 C# 的人。也许通过一个好的评论? :-) 非常感谢,埃里克。
    猜你喜欢
    • 2015-09-21
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2017-12-04
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多