精品成品网站入口,培训机构做网站宣传,织梦手机网站怎么修改,网页设计软件有哪些Visual C# 8.0中引入了可空引用类型#xff08;Nullable reference type#xff09;#xff0c;通过编译器提供的强大功能#xff0c;帮助开发人员尽可能地规避由空引用带来的代码问题。这里我大致介绍一下可空引用类型的基本内容。刚开始接触这个语言特性的时候#xff0… Visual C# 8.0中引入了可空引用类型Nullable reference type通过编译器提供的强大功能帮助开发人员尽可能地规避由空引用带来的代码问题。这里我大致介绍一下可空引用类型的基本内容。刚开始接触这个语言特性的时候可能会不太容易理解。引用类型本来不就是可以为空null的么为啥还要特别地引入“可空引用类型”的概念呢其实这是从编译器的角度要求开发人员在编程的时候就考虑某个变量是否有可能为空从而尽可能地减少由空引用所带来的代码错误。假设有如下类class Student
{public Student(string name, DateTime dayOfBirth) (Name, DayOfBirth) (name, dayOfBirth);public string Name { get; set; }public DateTime DayOfBirth { get; set; }public string Notes { get; set; }
}
此类定义了一个“学生”实体的基本信息为了简化起见这里只列出了需要讨论的几个属性Name学生姓名DayOfBirth学生生日Notes对学生信息的一些备注假设我们有两个操作在所有学生中找出所有具有备注信息的学生以及对所有学生按姓名排序在C#中很容易使用Linq来实现var studentsHasNotes students.Where(s s.Notes.Length 0);
以及var orderedStudents students.OrderBy(s s.Name);
到目前为止没啥问题程序能够正常运行。然而仔细进行代码审查不难发现在获取所有具有备注信息的学生的代码中也就是上面第一段代码中有可能出现空引用的异常因为对于一个“学生”实体来说它的Notes属性是有可能为null的。现在我们打开“可空引用类型”这一语言特性打开方式主要有两种可以在项目级别编辑csproj项目文件进行设置也可以通过#nullable预编译指令来实现编辑csproj项目文件加入Nullableenable/Nullable即可通过#nullable预编译指令来实现只需要在代码中需要的地方加入#nullable指令即可启用“可空引用类型”这一语言特性之后你会发现在上面的Student类的构造函数处出现了一个警告提示在构造函数执行完成时不可为空的“Notes”属性需要有一个不为空的值建议将其设置为可空的string类型。为什么编译器仅提示Notes有可能为空而不是Name属性呢因为构造函数中已经为Name赋值了因此对于任何一个Student的对象Name不可能为空而Notes则不然。Name不可能为空它不是string类型么万一在代码中它为空了怎么办别急编译器是不会允许出现这种情况的在此我们将Notes属性设置为string?类型于是你会发现位于构造函数上的警告信息已经没有了因为我们允许Student对象可以没有Notes数据但在“找出所有具有备注信息的学生”这一操作时又会出现警告提示说Notes有可能为空于是你会发现在启用了可空引用类型的语言特性后我们就需要仔细考察Student类型中的每一个引用类型的属性看它在实际应用中是否有可能为空如果可能为空则用可空引用类型来定义属性之后编译器就会帮助你来分析哪些地方有可能存在空引用。在上面的“找出所有具有备注信息的学生”例子中如果你觉得Notes肯定不会为空那么也可以使用“!”操作符来覆盖编译器的警告信息比如现在流行的.NET开源框架基本上都已经支持了可空引用类型了而且如果你是一名开源框架的开发人员也强烈建议在你的框架中启用这一语言特性来尽可能地避免空引用问题。比如如果你在代码中启用了可空引用类型特性那么当你从Newtonsoft.Json的JsonConverter类继承时你会发现你必须使用可空引用类型的函数重载但如果你没有启用可空引用类型特性那么当你从Newtonsoft.Json的JsonConverter类继承时你会发现重载函数的签名与以前一样好了对于C# 8.0的“可空引用类型”大致就介绍这么多相信应该已经基本上概括了它的要点和使用方式在日常开发中应该够用了。