C#:任何抑制编译器错误的方法都类似于抑制警告消息?

m-y*_*m-y 7 c# compiler-errors error-suppression

我有以下代码生成编译器错误:

    Boolean IConvertible.ToBoolean(IFormatProvider provider)
    {
        ThrowHelper.ThrowInvalidCast(typeof(MyType), typeof(Boolean));
    }
Run Code Online (Sandbox Code Playgroud)

编译器抱怨并非所有代码路径都返回一个值.这里的问题是ThrowHelper 总是会抛出一个错误.它是一个静态类,调用静态方法.

我知道我可以在ThrowHelper调用后用一个愚蠢的"return true"来满足编译器,但这似乎是不必要的代码.我知道我可以抑制警告消息,但是当我尝试使用SuppressMessageAttribute它时并不会阻止编译器抱怨.有没有办法只为这个方法抑制这个错误?

Dav*_*Yaw 8

你可以让ThrowHelper中的方法只创建异常,而不是实际抛出它.

Boolean IConvertible.ToBoolean(IFormatProvider provider)
{
    throw ThrowHelper.CreateInvalidCast(typeof(MyType), typeof(Boolean));
}
Run Code Online (Sandbox Code Playgroud)

这可能会导致更好的堆栈跟踪:它将指向ToBoolean,而不是ThrowInvalidCast.


Jef*_*tes 7

除了修复错误之外,无法抑制错误.

就其本质而言,错误表明编译器认为它无法生成有效代码.抑制错误的唯一方法是修复错误.只需添加return它想要的语句,然后在Microsoft Connect上引发一个问题,表明您认为编译器错误.

但是,我怀疑这是预期的行为,因为编译器不知道你正在调用的方法将始终抛出并确定以可预测的方式对任何可能的调用树进行操作将是困难的,如果不是不可能的话(想象一下,如果你调用的话)在结束投掷之前的20个方法链.

  • 在Connect上创建项目将浪费时间.在C#中无法确定某个方法始终抛出的编译器. (2认同)