C#函数不能返回--prevent编译器警告

本文关键字:编译器 警告 --prevent 返回 函数 不能 | 更新日期: 2023-09-27 17:58:32

我有一个函数,它保证永远不会返回。它记录数据并引发异常。

public int f()
{
    ... do stuff ...
    if(condition)
        BadUserData.Throw(... parameters...);
    else
        return 0;
}

我收到错误消息"不是所有的代码路径都返回一个值。我当然可以通过在不返回函数之后的伪返回来解决这个问题,但我想知道是否有一个属性或东西可以应用到Throw函数,它表明它永远不会返回?我看了看,但找不到。

C#函数不能返回--prevent编译器警告

不,没有。事实上,为了获得最合适的调用堆栈,我会有下面这样的东西,其中方法创建异常,但我们在本地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;