有没有办法在没有return语句的函数中返回默认值?

时间:2011-10-13 18:09:33

标签: c# .net-4.0

例如:

private bool isThisADumbQuestion(bool trustMeThisWilLBeTrue)
{
    if (trustMeThisWilLBeTrue)
        return true;
}

这总是会给出错误,即并非所有路径都返回值。在这种情况下,函数声明中是否可以返回默认值?从逻辑上讲:

private (bool = false) isThisADumbQuestion() {}

我猜这不可能,但我还在学习很多C#语法,所以我想我会问以防万一。似乎它是一个有用的功能,可以在函数体内保存大量的检查。

修改 上面的代码是一个逻辑示例,不能作为实际方法。我编辑它以便它实际上会给出承诺的错误。伙计们,对不起,对不起。

9 个答案:

答案 0 :(得分:7)

不,这是不可能的。非void返回函数上的所有代码路径必须以显式returnthrow语句终止。

注意:正如xanatos指出的那样,上述规则对于C#编译器可以确定永不终止的方法有一个例外。例如

int Test() {
  while (true) { }
}

答案 1 :(得分:2)

简答:

具有非空返回值的方法必须始终 return一个值。 “异常”情况是指throw抛出异常。

但我想你可以通过在方法顶部创建一个变量并使用默认值初始化它来解决它。

bool SomeMethod()
{
    bool retVal = true;

    if (someFlagHasBeenSet)
        retVal = false;

    return retVal;
}

答案 2 :(得分:2)

不,默认返回值是不可能的。

答案 3 :(得分:0)

只需在函数的最后添加一个return语句。

答案 4 :(得分:0)

  

这总是会给出错误,即并非所有路径都返回值。

不,它没有。编译器非常智能,可以检测到,在这种特殊情况下,方法体的末端是不可达的。

  

在这种情况下,函数声明中是否可以返回默认值?

不,不是。实际上,无法访问非void方法的结尾。

  

似乎它是一个有用的功能,可以在函数体中保存大量的检查。

这不仅仅是放

return false;

在方法体的右括号之前的方法的最底部。但是,对于语言设计人员和编译器编写者而言,鉴于您所提议的内容已经在某种意义上可能在当前设计的语言中,因此添加您提出的功能没有任何价值,但这样做的成本非常高。

答案 5 :(得分:0)

最后只有一个return语句和一个在整个函数中被更改的变量。默认返回是您最初设置的值。

答案 6 :(得分:0)

不,但你可以像这样构建你的函数:

private bool myFunc() {

    bool retval = false;

    if(some condition) {
        doSomething();
        retval = true;
    } else if(some other condition) {
        retval = true;
    }

    return retval;
}

答案 7 :(得分:0)

虽然不可能做你所说的,你可以像这样解决它吗?

 private bool isThisADumbQuestion()
 {
      if(true)
         return true;
      return false;
 }

然后它返回false(默认排序)

答案 8 :(得分:0)

从方法返回的唯一方法是以这种方式抛出异常

 public static int Method()
        {
            if (true)
                throw new Exception();

        }

@OP,我只是告诉你,你可以通过不返回任何值或使用return语句来绕过该错误。仅供参考。所以请不要在您的生产代码中使用它。