您的位置:首页 > 编程语言 > C语言/C++

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

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

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


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

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

DateTimenow=DateTime.Now;
DateTimetoday=newDateTime(2010,7,4);

TimeSpants=newTimeSpan(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多,所以如果你一定要转换,要提供一个强制转换。

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


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

其实大部分时候,尤其是页面编程的时候,我们需要做的转换都是字符串转数字,这样第一种强制转换是无法使用的。而且后面两种转换,如果不成功也会自动抛出异常。所以还是推荐大家用后面两种转换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: