为什么异常总是被接受为返回类型(抛出)?
有效示例1:
public string foo()
{
return "Hello World!";
}
无效示例(显然):
public string foo()
{
return 8080;
}
有效示例2:
public string foo()
{
throw new NotImplementedException("Hello Stackoveflow!");
}
我可以看到我的“无效示例”是“抛出”而不是“返回”异常,但是,我的方法永远不会返回该方法定义的类型。为什么我的编译器允许这个编译?
答案 0 :(得分:9)
异常不是返回类型,异常表示方法中的错误,并且无法继续。
您的有效示例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)。
答案 1 :(得分:-1)
您可以在此处阅读有关例外的内容:MSDN
例外可以为您提供有关错误的信息。你可以轻松处理并扔掉它们。