C#函数无法返回 - 阻止编译器警告

Fre*_*mas 1 c# attributes exception

我有一个保证永远不会返回的功能.它记录数据并引发异常.

public int f()
{
    ... do stuff ...
    if(condition)
        BadUserData.Throw(... parameters...);
    else
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 11

不,没有.实际上,为了获得最合适的调用堆栈,我会有更多类似于下面的内容,其中方法创建异常,但我们throw在本地创建:

if(condition)
    throw BadUserData.CreateSomeFormOfException(... parameters...);
Run Code Online (Sandbox Code Playgroud)

它一次解决了这两个问题.

另一种更懒惰的方法是:

if(condition) {
    // throws <===== comments are important here ;p
    BadUserData.Throw(... parameters...);
}
return 0;
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 6

好吧而不是BadUserData.Throw实际throw:

public int f()
{
    ... do stuff ...
    if(condition)
        throw new Exception("... parameters...");
    else
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者让此方法返回一个Exception,然后:

throw BadUserData(... parameters...);
Run Code Online (Sandbox Code Playgroud)

除此之外,不,没有任何属性或任何东西可以使您的代码编译.