|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。<p>本篇文章会商可空值范例(Nullable<T>)的转换,却确地说是怎样将一品种型的值工具转换成响应的可空值。这来历于明天我们的一个成员碰到的一个小成绩,我经由一些收拾写了这篇文章。固然没有甚么手艺含量可言,也但愿对某些读者带来匡助。
1、四种典范的范例转换体例
关于范例转化,大概进一步地,关于像Int、Double、DateTime、String等这些原生范例之间的转化,我们具有四种典范的转换体例。假如范例之间不具有山人转换干系存储,我们能够之间经由过程范例转换操纵符举行显式转换,好比:
<olclass="dp-c">doubledoubleValue=3.14159265;intintValue=(int)doubleValue;
第二种则是借助于Convert这个静态范例的ChangeType大概ToXxx办法(Xxx代表转换的方针范例),好比:
<olclass="dp-c">stringliteralValue="123";intintValue1=Convert.ToInt32(literalValue);intintValue2=(int)Convert.ChangeType(literalValue,typeof(int));
第三种办法为创立TypeConverter大概它的基于详细范例的多少子类,好比StringConverter、BooleanConverter、DateTimeConverter等。在利用的时分你必要先实例化响应的TypeConverter,然后挪用响应的范例转换办法。好比:
<olclass="dp-c">stringliteralValue="1981-08-24";DateTimeConverterdateTypeConverter=newDateTimeConverter();DateTimedateTimeValue=(DateTime)dateTypeConverter.ConvertFromString(literalValue);literalValue="02:40:50";TimeSpanConvertertimeSpanConverter=newimeSpanConverter();TimeSpantimeSpanValue=(TimeSpanimeSpanConverter.ConvertFromString(literalValue);
最初一种罕见的办法用在将基于某种详细范例的格局化字符串转化成对应的范例,我们能够挪用详细范例的静态办法Parse大概TryParse完成范例的转换,好比:
<olclass="dp-c">stringliteralValue="1981-08-24";DateTimedateTimeValue1=DateTime.Parse(literalValue);DateTimedateTimeValue2;if(DateTime.TryParse(literalValue,outdateTimeValue2)){//...}
2、当范例转换遭受Nullable<T>范例
Convert几近完成一切“兼容范例”之间的转换,也能够向Parse办法一样剖析具有正当格局的字符串。可是,假如方针范例换成是Nullable<T>范例的时分,范例转换将会失利。好比我们将下面第二个例子的方针范例从int换成int?(Nullable<Int32>):
<olclass="dp-c">stringliteralValue="123";try{int?intValue=(int?)Convert.ChangeType(literalValue,typeof(int?));}catch(InvalidCastExceptionex){Console.WriteLine(ex.Message);}
范例转换毛病动静会被输入:
<olclass="dp-c">InvalidcastfromSystem.StringtoSystem.Nullable`1[[System.Int32,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]
实践上,假如你挪用Convert的ChangeType办法将任何范例工具转换成Nullable<T>范例,城市抛出出InvalidCastException非常,即便你将T范例转化成Nullable<T>。好比,我们将下面的例子华夏数据范例换成int范例:
<olclass="dp-c">intintValue1=123;try{int?intValue=(int?)Convert.ChangeType(intValue1,typeof(int?));}catch(InvalidCastExceptionex){Console.WriteLine(ex.Message);}
仍然会输出相似的毛病信息:
<olclass="dp-c">InvalidcastfromSystem.Int32toSystem.Nullable`1[[System.Int32,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]].
而实践上,T范例的工具是能够显式大概隐式转化成Nullable<T>工具的。也就是说,上面代码所暗示的范例转换是没有成绩的:
<olclass="dp-c">intintValue1=123;int?intValue2=intValue1;int?intValue3=(int?)intValue1;
3、将基于Nullable<T>的范例转换完成在扩大办法中
从下面的先容我们能够得出如许的结论:假如范例T1和T2可以互相兼容,我们能够借助Convert将T1范例工具转换成T2范例,然后经由过程显式范例转换进一步转换成Nullable<T2>。我们能够经由过程这两个步骤完成针关于Nullable<T>范例的转换。为了操纵便利,我将此转换逻辑写在针对IConvertible接口的扩大办法中:
<divclass="code"><olclass="dp-c">publicstaticclassConvertionExtensions{publicstaticT?在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。 |
|