|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
是不是实质都是API?有的好像不只是API那么简单的,有的也是一种框架就像MFC一样。有的还是一种思想(就是做软件的思想)(好像很深奥,其实我也不懂^_^)我们晓得在C#中,援用范例能够为null,而值范例不成觉得null,就是值范例必需要有值。msdn下面的注释是值范例没有充足的空量来暗示空值,它的容量只够暗示合适该范例的值,没有过剩的容量。而数据库中(好比sqlserver)中,任何范例的值都是能够为null的,这就给我们在往数据库中拔出值带来贫苦了,好比要往数据库中的int字段中拔出一个null值,而C#在2.0之前,是不成能给一个int范例的变量赋于null的。
为懂得决这个成绩,C#引进了Nullable类,该类为值范例赋于null值供应了撑持,假如我们要为一个int范例赋于null值,那末我们就能够声明该范例为Nullable<int>,也能够间接缩写为int?,这就是我们在C#2.0后版本中看到的大批可为空的值范例声明体例。
基本基元范例的观点:
可空范例的原范例称之为该范例的基本基元范例,好比我们声了然变量int?,那末我们就称int为int?的基本基元范例。
分明了这些观点后,如今假定我们要写一个办法,该办法要撑持将一个object范例的值转换为任何大概转换的范例。
该类有两个参数,值value,范例convertsionType,
假如不撑持可空范例,那末该办法很好完成,以下:
publicstaticobjectChanageType(objectvalue,TypeconvertsionType)
{
returnConvert.ChangeType(value,convertsionType);
}
但假如convertsionType为可空范例,该办法就会报相似以下毛病了:
从“System.String”到“System.Nullable`1[[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]”的强迫转换有效。
以是改写办法以下:
publicstaticclassPageBaseHelper
{
publicstaticobjectSD_ChanageType(thisobjectvalue,TypeconvertsionType)
{
//判别convertsionType范例是不是为泛型,由于nullable是泛型类,
if(convertsionType.IsGenericType&&
//判别convertsionType是不是为nullable泛型类
convertsionType.GetGenericTypeDefinition().Equals(typeof(Nullable)))
{
if(value==null||value.ToString().Length==0)
{
returnnull;
}
//假如convertsionType为nullable类,声明一个NullableConverter类,该类供应从Nullable类到基本基元范例的转换
NullableConverternullableConverter=newNullableConverter(convertsionType);
//将convertsionType转换为nullable对的基本基元范例
convertsionType=nullableConverter.UnderlyingType;
}
returnConvert.ChangeType(value,convertsionType);
}
}
OK,如今该办法能够合用于值对任何范例的转换了,尝尝吧!
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。 |
|