龙海市城乡建设局网站,老鹰主机 建wordpress,企业网站开发公司,wordpress 权限是一个类还是一个函数Nullable Reference Type.在写C#代码的时候#xff0c;你可能经常会遇到这个错误#xff1a; 但如果想避免NullReferenceException的发生#xff0c;确实需要做很多麻烦的工作。 可空引用类型 Null Reference Type 所以#xff0c;C# 8的可空引用类型就出现了。 C# 8可以让… Nullable Reference Type.在写C#代码的时候你可能经常会遇到这个错误 但如果想避免NullReferenceException的发生确实需要做很多麻烦的工作。 可空引用类型 Null Reference Type 所以C# 8的可空引用类型就出现了。 C# 8可以让你在编译时就避免null引用错误它并不是把null值从代码里移除了而是它可以让你表达意图。具体的做法就是你可以告诉编译器哪个引用可能是null的而哪些引用不可能是null。 看下面这个例子 很显然我们期待person这个参数它不可以是null的。 但是在C# 8之前如果我们这样调用该方法那么在编译时是不会报错的 而如果运行程序那么结果就是 打开null检查 而在Visual Studio 2019里面C# 8的项目修改项目文件添加null检查之后 这里就会出现警告。 例子 有两个类Person类的Address属性的类型是另外一个类 现在可以看到这些属性都出现了波浪线的警告如果我们build一下这个项目那么也会出现很多警告 这是因为我们把这两个类的成员声明称了非null的引用类型而我却没有对它们进行初始化。 成员可能是null的 如果我想让这些成员可以为null意图上那么就需要把它们设置为可null的意图在类型后边加上问号“?”即可 再次build项目之后警告都没有了 然后再看一下这个方法 这里person.Address.Province有一个警告是因为Address可能是null。 可以有几种办法把这个警告去掉首先是使用null条件操作符 如果是Address是null的话就输出null。 或者如果你确认Address属性不会是null那么可以在Address后添加一个叹号”!“表示Address肯定不是null 这个叹号的作用仅仅是去掉了警告它没有改变任何运行时的状况如果Address为null那么这句话仍然会抛出NullReferenceException。 所以只有确认我们访问的东西肯定不是null的时候才应该使用!。 成员不可能是null 下面我更改一下思路意图假设所有的成员都不可能为null那么修改两个类 类成员又出现了警告。 而回到方法里我把叹号和问号都去掉之后也不会出现警告了因为它认为所有的成员都不会是null了 但是还要记住这个只是在编译时进行的检查如果成员为null还是会抛出异常的。这种操作对于运行时来说没有任何改变。 解决成员上出现的警告 使用构造函数对成员初始化可以去掉这些警告 另外一种办法就是直接对属性进行初始化 我们还是采用构造函数初始化的办法吧。 往构造函数里传递null 那么往构造函数里面传递null会出现什么情况呢试一下 提示还是比较智能的有警告它说无法把null这个字面值转化为非null的引用类型。 另一种开启nullable检查的方式 如果把老项目的项目文件直接添加以下内容 那么项目在编译的时候很可能出现大规模的问题。 所以一点一点启用nullable检查是比较好的做法。 首先我把项目文件恢复原状然后打开某个文件在文件最上面添加以下内容: 然后在文件的最下面添加 这样的话这个文件里面所有的内容都开起了nullable检查。 或者我们也可以只针对一段代码进行检查