本文介绍了为什么C#不允许我打电话给一个void方法作为return语句的一部分?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am curious if there is a legitimate reason as to why C# does not support calling a void method as part of the return statement when the calling method's return type is also void.

public void MethodA() 
{ 
    return; 
}

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



所以,我们通常会看到这样的:

So we would normally see this:

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

    // Do more stuff
}

...当我们可以用这个来代替:

... when we could be using this instead:

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

    // Do more stuff
}



这是一个语言的限制,由于C#如何处理无效

Is this a language limitation due to how C# handles void?

推荐答案

由于它只是方式的。

有一个方法可以使用收益语句来控制返回给调用者。
在返回无效收益语句不能指定
表达的方法。
在返回非的方法 - 无效收益语句必须
包括表达式计算返回值。

这是一个武断的决定(与ANSI C和它的其他后代兼容性大概制造),和其他语言做的事情不同的。

It's an arbitrary decision (presumably made for compatibility with ANSI C and its other descendants), and other languages do things differently.

例如,在Python中,所有函数返回一个值。如果执行收益语句没有值,或者让控制到达函数的结尾,那么它就像你写返回None

For example, in Python, all functions return a value. If you execute a return statement without a value, or let control reach the end of the function, then it's just like you had written return None.

在此相反,帕斯卡尔限制函数的术语来是有返回值的子程序;如果你不想返回任何东西,你用程序代替。

In contrast, Pascal limits the terminology of function to subprograms that have a return value; if you don't want to return anything, you use a procedure instead.

这篇关于为什么C#不允许我打电话给一个void方法作为return语句的一部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 23:46