C# Void类型方法表达式body成员允许非Void类型*的表达式(如果其他方法*
我不知道该怎么办,我在玩C#中的表情体成员,我注意到了一些奇怪的东西 本质上,如果您创建了一个具有void返回类型的方法表达式bodid成员,那么仍然可以使用非void返回类型方法作为表达式 例如:C# Void类型方法表达式body成员允许非Void类型*的表达式(如果其他方法*,c#,function,methods,return,expression,C#,Function,Methods,Return,Expression,我不知道该怎么办,我在玩C#中的表情体成员,我注意到了一些奇怪的东西 本质上,如果您创建了一个具有void返回类型的方法表达式bodid成员,那么仍然可以使用非void返回类型方法作为表达式 例如: public void MethodA() { } public void MethodB() => MethodA(); 一切正常 public string MethodA() { return "MethodA"; } public void MethodB() => Metho
public void MethodA() { }
public void MethodB() => MethodA();
一切正常
public string MethodA() { return "MethodA"; }
public void MethodB() => MethodA();
编译得很好(我没有运行它进行测试,但它编译的事实让我困惑)。这让我感到困惑,因为在我的脑海中我看到:
public void MethodB() { return MethodA(); }
public void MethodB() { return MethodA(); }
这显然是无效的,因为return
语句实际上返回了一个值,这在void
方法中是不允许的
然而,奇怪的是,以下内容没有编译:
public void MethodC() => "MethodC";
并给出“唯一赋值…”错误
为什么会这样?这是故意的,还是某种错误?有什么我遗漏的吗?如果表达式是另一种方法,是否允许表达式主体成员丢弃表达式的结果
这让我感到困惑,因为在我的脑海中我看到:
public void MethodB() { return MethodA(); }
public void MethodB() { return MethodA(); }
这实际上并不正确;生成的实际语法如下所示:
public void MethodB() { MethodA(); }
这很好。返回值被忽略
“MethodC”
代码片段不是一个结果可以作废的方法。它是一个实际值,需要根据C#语法进行赋值。常规语句也是如此:将放入“MethodC”代码>在空行上失败。有趣的是,考虑到我的实验,这是有意义的。我想我只是假设C#对待void
方法与其他表达式没有任何区别,显然我错了。