c#类型转换

1、隐式转换

隐式转换就是系统默认的、不需要加以声明就可以进行的转换。隐式转换不要求在源代码中使用任何特殊语法,编译器自动执行隐式强制转换。在隐式转换过程中,编译器无需对转换进行详细检查就能够安全地执行转换。隐式强制转换也称为“扩展转换“,因为要将窄数据类型转换为宽数据类型,且还将确保不会在转换过程中丢失数据。(注意:(1)转换前后的类型必须相兼容 (例如:int和double (2)、隐式数值转换实际上就是从低精度的数值类型到高精度的数值类型的转换,即小的类型转大的类型)

int a = 10;
double b = a;//隐式转换

2、显式转换

显式类型转换,又叫强制类型转换。与隐式转换正好相反,显式转换需要用户明确地指定转换的类型。显式转换包括所有的隐式转换,也就是说把任何系统允许的隐式转换写成显式转换的形式都是允许的。用()实现显示转换,这表示,把转换的目标类型名放在要转换的值之前的圆括号中。

long val = 30000;
int i = (int)val;//显式转换

提醒:
(1)、显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。无法进行类型转换。
(2)、强制类型转换会造成数据精度丢失。

3、通过方法进行类型转换

(1)、使用ToString()方法。

所有类型都继承了Object基类,所以都有ToString()这个方法(转化成字符串的方法)。

int i=200;
string s=i.ToString();

//这样字符串类型变量s的值就是”200” 。

(2)、通过int.Parse()方法转换,

参数类型只支持string类型。注意:使用该方法转换时string的值不能为NULL,不然无法通过转换;另外string类型参数也只能是各种整型,不能是浮点型,不然也无法通过转换 (例如int.Parse(“2.0”)就无法通过转换)。

int i;
i = int.Parse("100");

(3)、通过int.TryParse()方法转换,

该转换方法与int.Parse()转换方法类似,不同点在于int.Parse()方法无法转换成功的情况该方法能正常执行并返回0。也就是说int.TryParse()方法比int.Parse()方法多了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。

int i;
string s = null;
int.TryParse(s,out i);
bool isSucess=int.TryParse("12", out i);//输出值为12;True
bool isSucess=int.TryParse("ss", out i);//输出值为0;False
bool isSucess=int.TryParse("", out i);//输出值为0;False

(4)、通过Convert类进行转换,

附:Convert类常用的类型转换方法

方法 说明

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

(5)、 实现自己的转换,通过继承接口IConventible或者TypeConventer类,从而实现自己的转换。
注意:以Int类型为例,int.Parse,Convert.ToInt和int.TryParse的比较

【1】.参数和适用对象不同
int.Parse的参数数据类型只能是string类型,适用对象为string类型的数据
convert.toInt参数比较多,具体可以参见最下面的重载列表
int.TryParse的参数只能是只能是string类型,适用对象为string类型的数据
【2】.异常情况不同
异常主要是针对数据为null或者为""的情况

Convert.ToInt32 参数为 null 时,返回 0;Convert.ToInt32 参数为 “” 时,抛出异常;int.Parse 参数为 null 时,抛出异常。; int.Parse 参数为 “” 时,抛出异常。int.TryParse()方法比int.Parse()方法多了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。

【3】.返回值不同

int.TryParse与int.Parse和Convert.ToInt 在返回值的不同是返回bool类型。获取转换后的值是通过out result这个参数获取的。

注:可以理解为我定义一个object类型,好多小类型可以赋值过来。

你可能感兴趣的:(c#,开发语言)