Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Void类型方法表达式body成员允许非Void类型*的表达式(如果其他方法*_C#_Function_Methods_Return_Expression - Fatal编程技术网

C# Void类型方法表达式body成员允许非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

我不知道该怎么办,我在玩C#中的表情体成员,我注意到了一些奇怪的东西

本质上,如果您创建了一个具有void返回类型的方法表达式bodid成员,那么仍然可以使用非void返回类型方法作为表达式

例如:

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
方法与其他表达式没有任何区别,显然我错了。