|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。假如非希冀值是成绩地点的话,那末我们就应当勉力打消它们。只管我们几近从未希冀过null(空),但是范例体系却强制我们装出一副很必要它的模样。——Craig
只管这句话已被.NET开辟者在这些年来说过有数次。但是修改此成绩并不是易事,不单单是在变量上拍个属性或其他润色那末复杂。更严格的应战之一就是,如果T为非可空援用范例的话,那末default<T>该怎样处置。Craig写道,这里的基本成绩在于C#中根深蒂固的假定:该假定即每品种型都有默许值。试想一下:假如T没有(或大概没有取得)默许值,那末编译器在盘算default(T)、初始化范例T的字段、或初始化某个范例T的新数组中的数组项时就会无值可用。因为一谈到非可空援用范例就会触及此成绩,只管某些援用范例具有得当的非空默许值(比方非空字符串范例的默许值多是空字符串),但是关于年夜多半援用范例而言却并不是云云。试想一下:IEnumerator<int>的默许非空值是甚么?IObservable<bool>呢?UserControl呢?NetworkStream呢?谜底很复杂,它们没有任何默许非空值。而你能做的最好办法就是,给出某种仿照实例,即一旦你实验利用该实例就会招致失利……不外我们已有了那种实例,并称之为null(空)。 在题为非可空范例对C#:修改十亿美圆的毛病的文章中,Craig引进了两个新观点:
- T!用于唆使范例T为非可空范例。这也能够用于一般范例及范例参数。
- withdefault(T)用于把非可空援用范例参数变化为响应的可空范例参数。
如果必要构建公有字段或数组,就将其范例声明为withdefault(T),而不是范例T。然后在读取该字段或数组时,能够将其从头强迫转换非可空范例T。这类强迫转换自己是不平安的,并且倘使没有准确机关就有大概抛出非常,不外一旦成了非空,开辟者即可瓮中之鳖。要懂得如许做所发生的成果,最好仍是经由过程Craig文章中的例子来注释。
检察英文原文:AProposalforNon-NullableTypesinC#
实不相瞒,net网页编程是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,net网页编程的耗时是.NET的5倍。 |
|