<From C++ To C#> 更强大的值类型
2010-07-04 18:25
435 查看
上一节我们知道C#的int,double是一种类型,而类型本身可以包含成员变量成员函数,所以C#中的int除了普通赋值外还可以有.操作。
再介绍几个常用的值类型。
decimal也是个浮点数,它比double大一倍,比float大两倍。
还有两个很好用的值类型一个叫做DateTime代表日期,一个叫做TimeSpan代表时间间隔。
值类型也是没有NULL之说的。int只能赋值0,1,-1之类的值。不过有的时候我们确实希望对值类型也赋值null来加以区分。C#提供了?。我们只要把int改成int?就变成了一个可以赋值null的int类型了。其他值类型也是如此。
我们最后再一起来研究一下类型转换。众所周知,把short隐式转换成一个int完全没有问题,反之则不然。由于int能够存储的内容比short多,所以如果你一定要转换,要提供一个强制转换。
还有一种转换方式是int.Parse(“1”);double.Parse(“1.11”);..他可以把字符串转换成相应的值类型,也是比较方便的。
其实大部分时候,尤其是页面编程的时候,我们需要做的转换都是字符串转数字,这样第一种强制转换是无法使用的。而且后面两种转换,如果不成功也会自动抛出异常。所以还是推荐大家用后面两种转换。
//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”);..他可以把字符串转换成相应的值类型,也是比较方便的。
其实大部分时候,尤其是页面编程的时候,我们需要做的转换都是字符串转数字,这样第一种强制转换是无法使用的。而且后面两种转换,如果不成功也会自动抛出异常。所以还是推荐大家用后面两种转换。
相关文章推荐
- <From C++ To C#> 做猜数一个小游戏
- <From C++ To C#>输入的不是数字怎么办
- C++ -> C#: What You Need to Know to Move from C++ to C#
- <From C++ To C#>进军到函数
- <From C++ To C#>显示一下吧
- <From C++ To C#>非驴非马的string
- <From C++ To C#> 再来说说.NET Framework的跨语言性
- <From C++ To C#> 那就开始吧
- <From C++ To C#> 我们先定义一些局部变量
- <@乌龟:>从c#到c++的一些容易出现的困惑(2)
- <<Effective c++>>读书笔记---条款20:宁以pass-by-reference-to-const替换pass-by-value
- <转>[C#][Tutorial] How to become an EndScene() hooker
- ASP.NET(C#)FileUpload实现上传限定类型和大小的文件到服务器<from Copying>
- <转>标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- <Effective Mordern C++>笔记:Item 5:Prefer auto to explicit type declarations.
- <@乌龟:>从c#到c++的一些容易出现的困惑(1)
- <转载>C++各数据类型最大最小值
- How to call C/C++ sytle function from C# solution?
- Passing a list of objects from view to controller via jquery ajax(Json(aspx) -> object(C#))
- 【MSDN文摘】What You Need to Know to Move from C++ to C#