类型转换
C#是强语言类型,在了解如何类型转化前让我们想了解几个类型测试运算符
0.类型测试运算符
System.Type
0.1.typeof
返回typeof(x)x的类型,和GetType的区别是传入()的type要求是一个实例化的对象,而typeof要求的是一种类型
0.2.GetType()
x.GetType(),其中x为类型的实例,返回实例的数据类型
0.3.Is
E is T,E
是返回一个值的表达式,T
是类型或类型参数的名称。 E
不得为匿名方法或 Lambda 表达式。满足以下任一条件,则 is
运算符将返回 true
:
-
表达式结果的运行时类型为
T
。 -
表达式结果的运行时类型派生自类型
T
、实现接口T
,或者存在从其到T
的另一种隐式引用转换。
0.4.as
as
运算符将表达式结果显式转换为给定的引用或可以为 null 值的类型。 如果无法进行转换,则 as
运算符返回 null
。 与强制转换表达式 不同,as
运算符永远不会引发异常。
1.隐式转换
内置数值类型,如果要存储的值无需截断或四舍五入即可适应变量,则可以进行隐式转换。(精确度高数据的类型转化为精确度低的数据类型,string > char ,double > float , longlong > long > int >short 源类型的范围是目标类型范围的正确子集)以及从派生类到基类的转换。(里氏替换原则保证了这一点,子类所拥有的功能父类一定拥有,子类一定能转化成父类对象)由于这种转换始终会成功且不会导致数据丢失,因此无需使用任何特殊语法直接用用赋值符号即可。
2.显式转换(强制转换)
精确度低数据的类型转化为精确度高的数据类型,或所要转换的两种类型不能隐式转化
强制转换表达式:
形式为(T)E的强制转换表达式将表达式 E
的结果显式转换为类型 T
。 如果不存在从类型 E
到类型 T
的显式转换,则发生编译时错误。 在运行时,显式转换可能不会成功,强制转换表达式可能会引发异常。
从这里也可看出运算符可重载性,()除了强制转换数据类型,还可以使用括号调用方法或调用委托,也可以调整表达式中计算操作的顺序。
3.用户定义的转换
需要用到operate和checked关键字,过于进阶暂且不涉及。
4.使用帮助程序类进行转换
4.2.值类型中自带的方法
许多值类型类中都定义了TryParse、Parse方法
4.1Convert类
Convert.ToXXX方法
4.3 string类Format方法
将带有参数的string类型变量在接受传入参数后,将整体转化为string类型变量
string birth = string.Format("date is {0}", birthdate.ToLongDateString());
———————————————————————————————————————————
强制转换和类型转换 - C# 编程指南 - C# | Microsoft Learn
可能需要将类变量分配给接口类型的变量?怎么转