Void类型方法表达式身体成员允许表达非void类型*如果其他方法*

时间:2016-03-30 07:37:43

标签: c# function methods return expression

我不知道该怎么做,我在C#中扮演表情健全的成员,我注意到一些奇怪的东西。

基本上,如果创建一个具有void返回类型的方法表达式 - 身体成员,您仍然可以使用非void返回类型方法作为表达式。

示例:

public void MethodA() { }
public void MethodB() => MethodA();

按预期工作。

public string MethodA() { return "MethodA"; }
public void MethodB() => MethodA();

编译得很好(我还没有运行它来测试,但它编译的事实让我困惑)。这让我感到困惑,正如我的脑海中所见:

public void MethodB() { return MethodA(); }

这显然无效,因为return语句实际上返回了一个值,void方法不允许这样做。

然而,奇怪的是,以下内容无法编译:

public void MethodC() => "MethodC";

并提供"仅限作业......"错误。

为什么会这样?这是故意的,还是某种bug?有什么我想念的吗?表达式身体成员是否可以抛弃表达式的结果,如果它是另一种方法?

1 个答案:

答案 0 :(得分:1)

  

这让我感到困惑,就像在我脑海中看到的那样:

public void MethodB() { return MethodA(); }

这实际上并不正确;生成的实际语法是:

public void MethodB() { MethodA(); }

这很好。返回值只是被忽略。

"MethodC"代码片段不是一种结果可以无效的方法。它是一个实际值,需要根据C#语法进行分配。对于常规语句也是如此:将"MethodC";放在空行上失败。