当前位置: 首页 > 编程语言 > C#

有什么方法可以像抑制警告消息一样抑制编译器错误?分享

时间:2023-04-10 11:33:27 C#

C#:有什么方法可以像抑制警告信息一样抑制编译错误?我有以下代码生成编译器错误:BooleanIConvertible.ToBoolean(IFormatProviderprovider){ThrowHelper.ThrowInvalidCast(typeof(MyType),typeof(Boolean));}编译器抱怨并非所有代码路径都返回一个值。这里的问题是ThrowHelper总是会抛出一个错误。它是一个静态类,调用静态方法。我知道我可以在ThrowHelper调用后用一个愚蠢的“returntrue”来满足编译器的要求,但这似乎是不必要的代码。我知道我可以禁止显示警告消息,但是当我尝试使用SuppressMessageAttribute时,它??不会阻止编译器发出警告。有没有办法仅针对此方法抑制此错误?除了修复错误之外,没有其他方法可以抑制错误。本质上,该错误表明编译器认为它无法生成有效代码。抑制错误的唯一方法是修复它们。只需添加它想要的return语句,然后在MicrosoftConnect上提出一个问题,说你认为编译器是错误的。但是,我怀疑这是预期的行为,因为编译器不知道您正在调用的方法将始终抛出并且以可预测的方式确定对于任何可能的调用树(想象一下,如果不是不可能的话)也是困难的,如果你调用它)在结束throw之前执行20个方法链。您可以使ThrowHelper中的方法只创建异常而不是实际抛出异常。BooleanIConvertible.ToBoolean(IFormatProviderprovider){抛出ThrowHelper.CreateInvalidCast(typeof(MyType),typeof(Boolean));这可能会产生更好的堆栈跟踪:它将指向ToBoolean而不是ThrowInvalidCast。关于为什么请求的功能可能会导致问题的简单大脑练习。假设ThrowHelper.ThrowInvalidCast是在某个第三方库中定义的。您可能知道该方法总是抛出并告诉编译器它,或者一个非常高级的静态分析器可能能够确定该方法在编译代码时总是抛出。现在其他一些开发人员已经部署了该库的更新版本。现在这个方法并不总是抛出。突然,出现了你的方法没有返回路径的情况。为了处理这种情况,编译器(或运行时)必须包含一个备份计划,说明在这种情况下该怎么做。对于可以通过编写正确的代码轻松修复的东西来说,这是相当多的开销。更新:理论上,可以扩展C#以允许没有返回路径的方法。EricLippert在对JonSkeet的回答的评论中提到:“从不”方法只是一个无效方法,它不允许到达端点或任何返回语句。这在编译时解决了问题。在运行时,验证器有责任确保该方法实际上正确地实现了它的返回类型语义;验证器可以类似地确定没有返回指令并且端点不可到达。以上是C#学习教程:C#:有什么方法可以抑制编译错误类似于抑制警告信息?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: