C#语言 -- 类型转换
2015-08-10 15:08
405 查看
C#语言主要有两种类型:
值类型:直接存储在内存的栈上面;int, bool, struct, enum,
引用类型:在栈上只存储一个引用,堆上面才会存储具体的值;内建引用:object, string,dynamic; class
类型转换的形式:
1. 隐式转换:
//1. 隐式转换;用于小的类型向大的类型转换;子类向基类转换;
int i = 10;
long l = i;
2. 显式转换:有数据丢失可能无法强制转换,要使用异常机制
使用as: as只能用于引用类型和非空类型
C1 c1 = new C1();
C2 c2 = c1 as C2; //不会报错,如果转换失败,则c2=null;
3. 通过Method进行转换:
int iFroms = Convert.ToInt32("100");
或者:int iFroms =Int32.Parse("100");
或者:int iFroms2;
bool iFroms = Int32.TryParse("100", out iFroms2); //尝试去转换
//装箱:是一个隐式转换,不需要特别的语法
int iToBoxing = 100;
object iBoxed = iToBoxing;
2. 拆箱: 将一个引用类型转变成值类型
由于装箱和拆箱比较消耗资源,因此应当尽量避免使用
3. 另值类型可为空:
int? iNullable = 100;
相当于:System.Nullable<int> iNullable = 100;
访问时用: iNullable.hasValue; 判断是否有值,如果有,则可以用iNullable.Value; 访问;
或者:iNullable.GetValueOrDefault(); 如果为空,返回0, 不为空,返回该值
另外: int ii = iNullable ?? 500; // 如果iNullable为空,则赋值为500,不为空,则保持原值
值类型:直接存储在内存的栈上面;int, bool, struct, enum,
引用类型:在栈上只存储一个引用,堆上面才会存储具体的值;内建引用:object, string,dynamic; class
C#类型转换
C#是一种强类型的编程语言,即在编译的时候进行类型的检查。类型转换的形式:
1. 隐式转换:
//1. 隐式转换;用于小的类型向大的类型转换;子类向基类转换;
int i = 10;
long l = i;
2. 显式转换:有数据丢失可能无法强制转换,要使用异常机制
//2. 显式转换:有大的范围向小的范围转换; 基类向子类转换: double d = 10.05; int iFromD = (int)d;
使用as: as只能用于引用类型和非空类型
C1 c1 = new C1();
C2 c2 = c1 as C2; //不会报错,如果转换失败,则c2=null;
3. 通过Method进行转换:
int iFroms = Convert.ToInt32("100");
或者:int iFroms =Int32.Parse("100");
或者:int iFroms2;
bool iFroms = Int32.TryParse("100", out iFroms2); //尝试去转换
C#的装箱和拆箱和Nullable类型
1. 装箱: 将一个值类型转换成引用类型 :将栈中的值类型打包放入堆中//装箱:是一个隐式转换,不需要特别的语法
int iToBoxing = 100;
object iBoxed = iToBoxing;
2. 拆箱: 将一个引用类型转变成值类型
//拆箱: 通过显式转换实现,可能有数据丢失或出错 int iUnBoxing = (int)iBoxed;
由于装箱和拆箱比较消耗资源,因此应当尽量避免使用
3. 另值类型可为空:
int? iNullable = 100;
相当于:System.Nullable<int> iNullable = 100;
访问时用: iNullable.hasValue; 判断是否有值,如果有,则可以用iNullable.Value; 访问;
或者:iNullable.GetValueOrDefault(); 如果为空,返回0, 不为空,返回该值
另外: int ii = iNullable ?? 500; // 如果iNullable为空,则赋值为500,不为空,则保持原值
相关文章推荐
- C#实现向已存在的Excel文件中写入数据实例(两种方法)
- C# 最小化窗口截图 句柄 调用截图 黑屏原因
- c# 委托
- 彻底理解C#中值类型和引用类型的区别
- WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享
- WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享
- C# 合并DLL, 合并DLL进入EXE 【转】
- 快速上手之 C#操作WORD对象模型
- Word模板生成C#源码
- C#基础系列——委托和设计模式(二)
- C#基础之二
- mongdo通用类(C#版)
- C# Access
- Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
- Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
- 使用C#详解常用排序算法(三):归并排序(Merge Sort)
- C# 静态成员
- 使用C# 和Consul进行分布式系统协调
- C#里partial关键字的作用(转摘)
- C# ref & out关键字