C#函数不能返回--prevent编译器警告
本文关键字:编译器 警告 --prevent 返回 函数 不能 | 更新日期: 2023-09-27 17:58:32
我有一个函数,它保证永远不会返回。它记录数据并引发异常。
public int f()
{
... do stuff ...
if(condition)
BadUserData.Throw(... parameters...);
else
return 0;
}
我收到错误消息"不是所有的代码路径都返回一个值。我当然可以通过在不返回函数之后的伪返回来解决这个问题,但我想知道是否有一个属性或东西可以应用到Throw函数,它表明它永远不会返回?我看了看,但找不到。
不,没有。事实上,为了获得最合适的调用堆栈,我会有下面这样的东西,其中方法创建异常,但我们在本地throw
它:
if(condition)
throw BadUserData.CreateSomeFormOfException(... parameters...);
它一次解决了这两个问题。
另一种更懒惰的方法是:
if(condition) {
// throws <===== comments are important here ;p
BadUserData.Throw(... parameters...);
}
return 0;
实际上不是BadUserData.Throw
而是throw
:
public int f()
{
... do stuff ...
if(condition)
throw new Exception("... parameters...");
else
return 0;
}
或者让这个方法返回一个Exception,然后:
throw BadUserData(... parameters...);
除此之外,不,没有任何属性或任何东西可以使代码编译。
如果方法的工作是记录,然后抛出和异常,那么您必须将方法签名更改为
public void f()
而不是
public int f()
这将解决编译器问题。它也会更干净,因为你可以省略方法体的else部分。
在BadUserData.Throw
中返回异常,而不是抛出异常并执行:
public int f()
{
... do stuff ...
if(condition)
throw BadUserData.Throw(... parameters...);
else
return 0;
}
我想您别无选择,只能添加一个带有伪值的返回语句,例如return -1;
。