<From C++ To C#> 更强大的值类型

上一节我们知道C#的int, double是一种类型,而类型本身可以包含成员变量成员函数,所以C#中的int除了普通赋值外还可以有.操作。

//int的最大值
int.MaxValue
//double的绝对值
double.PositiveInfinity
//bool的字符串表示
bool.FalseString
//char是不是标点符号
char.IsPunctuation('?')

 

再介绍几个常用的值类型。

decimal也是个浮点数,它比double大一倍,比float大两倍。
还有两个很好用的值类型一个叫做DateTime代表日期,一个叫做TimeSpan代表时间间隔。

DateTime now = DateTime.Now;
DateTime today = new DateTime(2010,7,4);
TimeSpan ts = new TimeSpan(0,10,0);//十分钟
 这两个没有昵称的也是值类型啊
 
值类型只是关心值本身,所以他们跟其他对象不同,比对的时候只是比对值本身,而不是比对对象的内存地址。这也跟C++的int, double用法保持一致了。

值类型也是没有NULL之说的。int只能赋值0,1,-1之类的值。不过有的时候我们确实希望对值类型也赋值null来加以区分。C#提供了?。我们只要把int改成int?就变成了一个可以赋值null的int类型了。其他值类型也是如此。

       char? cc = null;
       bool? bb = null;
       float? ff = null;
       DateTime? dt = null;

我们最后再一起来研究一下类型转换。众所周知,把short隐式转换成一个int完全没有问题,反之则不然。由于int能够存储的内容比short多,所以如果你一定要转换,要提供一个强制转换。

short s = (short)IamInt;
C++这样就可以了,C#比C++更为谨慎,它怕你转换的时候还是导致了数据丢失,进一步更提供了checked关键字。
short s = checked((short)i);
如果转换的时候确实引起了数据丢失,checked会抛出一个System.OverflowException来提醒你。
 
由于我对.操作提示出来的内容比较感兴趣,所以实际上我已经很少用(short)i,这种转换方式。而是采用了System.Convert.ToInt16(…)来做转换。Convert可以To很多种,而且To了很多种以后还包含各种转换参数。只要是.出来的东西我都比较放心。 

还有一种转换方式是int.Parse(“1”); double.Parse(“1.11”);..他可以把字符串转换成相应的值类型,也是比较方便的。

其实大部分时候,尤其是页面编程的时候,我们需要做的转换都是字符串转数字,这样第一种强制转换是无法使用的。而且后面两种转换,如果不成功也会自动抛出异常。所以还是推荐大家用后面两种转换。

posted @ 2010-07-04 18:25  桔红糕  阅读(307)  评论(0编辑  收藏  举报