c# - 为什么 C# 不允许我调用 void 方法作为返回语句的一部分?

标签 c# void

我很好奇,当调用方法的返回类型也是 void 时,C# 不支持调用 void 方法作为 return 语句的一部分是否有正当理由。

public void MethodA() 
{ 
    return; 
}

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

所以我们通常会看到这个:

public void MethodMeh() 
{
    if (expression) 
    {
        MethodA();
        return;
    }

    // Do more stuff
}

...当我们可以使用它时:

public void MethodAwesome() 
{
    if (expression) 
        return MethodA();

    // Do more stuff
}

这是由于 C# 处理 void 的方式造成的语言限制吗?

最佳答案

因为这很简单the language is defined .

A method can use return statements to return control to its caller. In a method returning void, return statements cannot specify an expression. In a method returning non-void, return statements must include an expression that computes the return value.

这是一个武断的决定(大概是为了与 ANSI C 及其其他后代兼容),其他语言的做法不同。

例如,在 Python 中,所有函数都有返回值。如果您执行一个没有值的 return 语句,或者让控制到达函数的末尾,那么就像您编写了 return None 一样。

相比之下,Pascal 将函数 的术语限制为具有返回值的子程序;如果你不想返回任何东西,你可以使用 procedure 代替。

关于c# - 为什么 C# 不允许我调用 void 方法作为返回语句的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665649/

相关文章:

c# - 在 C# 中向 EventHandler 添加一些参数

c++ - 如何在 C++ 中存储泛型元素数组?

html - typescript 错误〜类型void中不存在属性〜

c++ - 为什么这个类会卡住程序?

c - 取消引用 void * 就像 (int) -- 标准做法?

c# - MVC 4 中的异步操作过滤器

c# - 如何在 WCF 服务 wsdl 链接中用域名替换机器名

c# - ML.NET 无需拟合即可转换数据

c# - 字典和键值对

java - Callable<Void> 作为功能接口(interface)与 lambdas