下面的课有两种方法,其中M1抱怨’并非所有代码路径都返回一个值’而M2则没有.
问题:编译器如何在返回值的上下文中解析M2?如何将NotImplementedException实例隐式转换为int(如果有任何内部编译时间分辨率)
class A { int M1() { } int M2() { throw new NotImplementedException(); } }
解决方法
返回值并不总是需要一种方法;特别是,它也允许通过抛出异常退出(在这种情况下不返回任何值).
编辑:具体来说,返回int的the rules for the body of a method是:
>方法中的所有return语句都必须返回一个可转换为int的表达式
>必须无法访问方法块的末尾
在您的示例中,编译器可以证明M2总是通过抛出退出,因此方法块的末尾不可达(满足规则#2).也没有退货声明,也符合规则#1.因此,这是一个有效的方法定义.
另一方面,M1不满足规则#2,因此不合法.
您可能会被错误消息误导,但根本没有提到丢弃,但是考虑到几乎在所有情况下返回值的方法都返回而不是抛出 – 编译器只是告诉您希望您可能忘记了.
原文地址:https://www.jb51.cc/csharp/91892.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。