C#类型转换

  1、因为C#是强类型语言,变量在声明后不能从新声明为其它类型,但能够经过类型转换(Type Conversion)将符合转换条件的其它类型的变量转换为目标类型的变量,有如下几种类型的转换方式:安全

  二.隐式转换(Implicit Conversion):该转换是一种安全的类型转换,不会致使数据丢失,所以不须要任何显式操做;从较低精度/较小范围类型到较高精度/较大范围类型的转换以及从派生类到基类和所实现接口的转换都是隐式转换;spa

  1.隐式转换在代码中不须要任何显式操做,对于值类型:code

double myDouble = 1f; //1

  ※全部数值类型之间的隐式转换关系详见;orm

  2.对于引用类型,一种类型的变量或对象能够直接隐式转换为任何一个直接或间接基类和所实现接口类型的变量:对象

public class MyBaseClass { }
public interface IMyInterface { }
public class MyClass : MyBaseClass, IMyInterface { }
MyClass myClass = new MyClass();
MyBaseClass myBaseClass = myClass; //派生类变量隐式转换为基类变量
IMyInterface myInterface = new MyClass(); //实现接口的类型对象隐式转换为接口变量

  3、显式转换(Explicit Conversion):也称为强制转换(Cast),在转换过程当中若是可能存在数据丢失或出于某些缘由可能抛出异常时必须使用显式转换,显式转换须要使用强制转换运算符();从较高精度/较大范围类型到较低精度/较小范围类型的转换以及从基类和所实现接口到派生类的转换都是显式转换;blog

  1.显式转换须要在要转换的值或变量前加入强制转换运算符()并在括号中指定目标类型,对于值类型:接口

int myInt = (int)2.5f; //2

  ※将浮点类型的值转换为整型类型时会损失一部分精度,只保留整数部分;ci

  ※全部数值类型之间的显式转换关系详见;get

  2.对于引用类型,基类和接口类型的变量须要强制转换后才能赋值给另外一种类型的变量:博客

myClass = (MyClass)myBaseClass; //基类变量显式转换为派生类变量
myClass = (MyClass)myInterface; //接口变量显式转换为实现接口的类型变量

  ※这个操做须要被转换变量所指向的对象是由目标类型或目标类型的派生类型的对象转换而来,不然会抛出异常InvalidCastException;推荐使用as运算符进行引用类型的显式转换,详见;

  3.引用类型之间的隐式转换和显式转换都不会改变变量的运行时类型,即获取转换先后两个变量的类型对象相同:

myClass.GetType(); //typeof(MyClass)
myBaseClass.GetType(); //typeof(MyClass)

  ※在调用不一样编译时类型的变量的成员时会产生不一样的行为;

  4、经过在类型定义中声明一些包含特殊签名的静态方法能够实现当前类型与其它类型之间的自定义转换规则,可使不具备默认转换规则的类型之间进行隐式或显式转换,详见;

  ※自定义类型转换的实现方式若是产生新对象,则再也不知足引用类型变量转换先后获取的类型对象相同的规则;

  5、内置类型中声明的和类型转换帮助类中封装好的转换方法:内置值类型中的静态方法Parase()、TryParase()等和类型转换帮助类System.Convert、System.BitConverter等:

  1.使用内置值类型的静态方法Parse()将string类型的对象转换为值类型的对象:

int num = int.Parse("25"); //参数为null时会抛出异常ArgumentNullException,参数格式不正确致使没法转换时会抛出异常FormatException

  2.推荐使用内置值类型的静态方法TryParse()进行转换,该方法不会抛出异常,若是转换失败则返回false,若是转换成功则返回true并输出转换后的值:

bool isCanConvert = int.TryParse("hello", out int num); //num = 0,isCanConvert = false
isCanConvert = int.TryParse("25", out num); //num = 25,isCanConvert = true

  3.使用基本类型转换帮助类System.Convert中的静态方法ToXXX()能够将任何一个基本类型转换为另外一个基本类型:

int num = Convert.ToInt32("25"); //参数为null时会返回0,参数的值超过目标类型范围时会抛出异常OverflowException,参数格式不正确致使没法转换时会抛出异常FormatException

  ※经过此方式将浮点数转换为整型时会对小数部分进行四舍六入五取偶,损失一部分精度:

int num = Convert.ToInt32(5.5f); //6

 


若是您以为阅读本文对您有帮助,请点一下“推荐”按钮,您的承认是我写做的最大动力!

做者:Minotauros
出处:https://www.cnblogs.com/minotauros/

本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。

相关文章
相关标签/搜索