C#可空引用类型怎么使用
本篇内容主要讲解“C#可空引用类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#可空引用类型怎么使用”吧!
安装您必须下载Visual Studio 2017 15.5预览版(目前最新发布版本是15.4)
安装Roslyn扩展预览版本:
下载并解压 Roslyn_Nullable_References_Preview.zip[最新版本 11/15/17];
关闭所有运行的Visual Studio;
运行zip根目录中的 .\install.bat 脚本(如果需要卸载扩展,可以运行.\uninstall.bat脚本);
语法与类型在语法上,可为空引用类型与可为空值类型使用的语法是一致的,在类型后面追加?即可。
classPerson{publicstringFirstName;publicstring?MiddleName;publicstringLastName;}
我们都知道当初微软在增加可为空值类型的时候,实际是在框架中增加了System.Nullable<>
类型,您肯定会问,可为空引用类型以框架中又增加了什么新的类型。
我们来看一个演示:
classProgram{staticvoidMain(string[]args){Console.WriteLine(typeof(string?).FullName);}}
输出结果:
您是否觉得奇怪,怎么输出的是System.String
,是的,其实微软在框架中没有加入任何类型,我们Person
类型进行编译后,再通过dotPeek进行反编译,就明白到底发生了什么。
反编译后的结果:
internalclassPerson{publicstringFirstName;[Nullable]publicstringMiddleName;publicstringLastName;}
只是在MiddleName
字段上增加了System.Runtime.CompilerServices.NullableAttribute
标记。
我们来看一看属性、参数、变量、返回值编译之前与编译之后的比对结果。
属性
//编译前:publicstring?MiddleName{get;set;}//编译后:[Nullable]publicstringMiddleName{[return:Nullable]get;[param:Nullable]set;}
参数
//编译前:publicPerson(string?middleName){this.MiddleName=middleName;}//编译后:publicPerson([Nullable]stringmiddleName){this.MiddleName=middleName;}
返回值
//编译前:publicstring?DoSomething(){returnnull;}//编译后:[return:Nullable]publicstringDoSomething(){return(string)null;}
变量
//编译前:string?name;//编译后:stringname;
这里除了变量,其它的都使用了NullableAttribute
标记进行的修饰。
通过上面的章节,我们知道,可为空引用类型只是在参数、属性、参数和返回值中使用NullableAttribute
标记进行修饰,实际上对程序的正常运行没有任何的影响。那么它可以为我们做什么呢?
在C#中不能表达这个变量、参数、字段、属性,返回值等可能为null
或不能为null
,可为空类型可以帮我们解决这个问题。
classPerson{publicstringFirstName;//不为nullpublicstring?MiddleName;//可能为nullpublicstringLastName;//不为null}
这个类型的可以表示每一个人都应该FristName和LastName,但是不是每一个人都应该有MiddleName。
编译器检测可为空引用类型的另一个好处是编译器可以帮助我们检测代码,比如对于直接使用可为空引用类型的属性,编译器会发出警告。
voidM(Personp){p.FirstName=null;//1WARNING:Cannotconvertnulltonon-nullablereference。p.LastName=p.MiddleName;//2WARNING:Possiblenullreferenceassignment.strings=default(string);//3WARNING:Cannotconvertnulltonon-nullablereference。if(p.MiddleName!=null){WriteLine(p.MiddleName.Length);//ok}WriteLine(p.MiddleName!.Length);//ok}classPerson{publicstringFirstName;//4WARNING:Non-nullablefield'FirstName'isuninitialized.publicstring?MiddleName;publicstringLastName;//5WARNING:Non-nullablefield'LastName'isuninitialized.}
编译器会帮我们做以下几点检测:
如果给非可为空引用类型赋null
值或可为空引用类型的值,则会发出警告;
如果直接使用可为空引用类型,则会发出警告;
如果从来没有给非可为空引用类型的属性赋值,则会发出警告;
如果需要直接使用可为空引用类型,需要使用!符号告诉编译器,您已经确认过该值不可能为空。
当然这只是编译器的行为,可以禁用与之相关的警告提示。
到此,相信大家对“C#可空引用类型怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。