为什么异常总是被接受为返回类型(当抛出时)

本文关键字:返回类型 异常 为什么 | 更新日期: 2023-09-27 18:22:33

为什么异常总是被接受为返回类型(抛出)

有效示例1:

  public string foo()
    {
     return "Hello World!";
    }

无效示例(显然):

public string foo()
{
 return 8080;
}

有效示例2:

public string foo()
{
 throw new NotImplementedException("Hello Stackoveflow!");
}


我可以看到我的"无效示例"是"抛出"而不是"返回"Exception,但是,我的方法从不返回该方法定义的类型。为什么我的编译器允许编译?

为什么异常总是被接受为返回类型(当抛出时)

异常不是返回类型,异常表示方法中存在错误,并且无法继续。

有效的示例2没有返回任何内容,编译器知道它总是会抛出异常,因此不需要担心返回。

如果你有:

public string foo(int something)
{
  if(something > 10){
    throw new NotImplementedException("Hello Stackoveflow!");
  }
}

它会抱怨,因为你没有一直返回一个值。

此外,根据您的示例,如果您的代码中有:string val = something(),则永远不会设置val,因为异常不是返回值。

但是,它是有效的代码,函数可以根据其签名返回值,也可以抛出异常。如果有什么不同的话,您可能会期望编译器发出警告。我不确定C#,但在java中,如果您的代码被确定为无法访问,您将收到警告,例如:

public string foo(int something)
{
  throw new NotImplementedException("Hello Stackoveflow!");
  return "OK";
}

这段代码会给你一个警告,因为这个方法不可能到达return语句(但它仍然是有效的代码,至少如果它是Java的话)。

您可以在此处阅读有关异常的信息:MSDN

异常会向您提供有关出现错误的信息。你可以巧妙地处理和投掷它们。