C#类型转换

C#类型转换的可能情况

  1. 值类型间的传统强制类型转换,(type)变量名

  2. 使用as的安全类型转换

  3. 派生类转基类,隐式转换;基类转派生类,显式转换

  4. 值类型转引用类型,称为装箱;引用类型转值类型,称为拆箱

  5. 从低精度的数值类型到高精度的数值类型的转换,隐式数值转换

  6. 基本类型之间,使用Convert类实现类型转换

  7. 字符串类型转换成任意类型,使用Parse方法

(type)变量名

传统不安全的强制类型转换

Object obj1 = new NewType();			//第一种:不安全
NewType newValue = (NewType)obj1;

Object obj1 = new NewType();		  //第二种:不高效
NewType newValue = null;
try
{
	newValue = (NewType)obj1;
}
catch (Exception err)
{
	MessageBox.Show(err.Message);
}	

as+类型

安全高效的类型转换

Object obj1 = new NewType();
NewType newValue = obj1 as NewType;

​ 当需要转化对象的类型属于转换目标类型,或者转换目标类型的派生类型时,才能成功,当不成功的时候,会返回null,所以使用前需判是否为null检查转换成功与否,直接使用将抛出异常

  • 无法应用于值类型转换(因为值类型不能为null)
  • 无法应用于自定义类型间转换

Is+类型

检查对象是否与给定的类型兼容

Object obj1 = 10;
if(obj1 is int )
{
	int num = (int)obj1;
}

​ 若对象引用是null,is运算符总是返回false,因为没有可检查其类型的对象。

  • Object => 已知引用类型——使用as操作符完成
  • Object => 已知值类型——先使用is操作符来进行判断,再用类型强转换方式进行转换

装箱与拆箱

装箱步骤

  1. 在托管堆中分配内存,除了分配值类型各个字段所需内存,还要加上托管堆所有对象都有的两个额外成员(类型对象指针和同步索引块)所需的内存
  2. 将值类型的字段复制到新分配的堆内存中
  3. 返回对象地址,即对象的引用

拆箱步骤

  1. 获取对象各个字段的地址
  2. 将各个字段的值从托管堆上复制到线程栈新的值类型实例

Convert

一般格式

 convert.To数据类型(变量名);

常用的convert类型转换方法

方法 解释
Convert.ToInt16() 转换为整型(short)
Convert.ToInt32() 转换为整型(int)
Convert.ToInt64() 转换为整型(long)
Convert.ToChar() 转换为字符型(char)
Convert.ToString() 转换为字符串型(string)
Convert.ToDateTime() 转换为日期型(datetime)
Convert.ToDouble() 转换为双精度浮点型(double)
Conert.ToSingle() 转换为单精度浮点型(float)

字符串与其他类型的转换

其他类型转为字符串,使用

变量名.ToString();

字符串转换为其他类型

数据类型.Parse(字符串类型的值);

note:

当多于一个字符的字符串用Parse转换为char类型时,会抛出异常

当不是数字的字符串用Parse转换为int类型时,会抛出异常

示范

//ToString
int i = 10;
string str = i.ToString();
Console.Write(str);
//输出:10

//Parse
char i = char.Parse("h");
Console.Write(i);
//输出:h
int i = int.Parse("21");
Console.Write(i);
//输出:21
posted @ 2020-08-26 09:35  AMzz  阅读(375)  评论(0编辑  收藏  举报
//字体