一般C#问题

下面的课有两种方法,其中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,因此不合法.

您可能会被错误消息误导,但根本没有提到丢弃,但是考虑到几乎在所有情况下返回值的方法都返回而不是抛出 – 编译器只是告诉您希望您可能忘记了.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...