速查表 - VB.NET 和 C# 中的类型转换






4.56/5 (70投票s)
描述了 VB.NET 和 C# 中几种类型转换和类型相关的操作。
引言
本文描述了 VB.NET 和 C# 中几种类型转换和类型相关的操作。
VB.NET 中的类型转换
-
默认情况下,在 VB 中,当你将对象分配给变量时,会自动进行类型转换。然后对象会自动转换为变量的类型。
此行为可以通过在代码文件顶部添加一个选项行来影响
Option Strict On Option Strict Off
启用后,类型转换是严格的,并且不是自动进行的。
-
显式类型转换可以使用转换运算符
CType()
或DirectCast()
textbox = CType(obj, TextBox) textbox = DirectCast(obj, TextBox)
这两个关键字的区别在于,只要表达式和类型之间定义了有效的转换,
CType
就会成功,而DirectCast
要求对象变量的运行时类型与指定的类型相同。但是,如果指定的类型和表达式的运行时类型相同,则DirectCast
的运行时性能优于CType
。如果参数类型不匹配,DirectCast
会抛出InvalidCastException
错误。 -
可以使用
TypeOf...Is
运算符来测试一个对象是否属于特定类型If TypeOf obj Is TextBox Then...
-
可以使用
GetType
运算符获取给定类型的System.Type
对象Dim t As System.Type t = GetType(String) MessageBox.Show(t.FullName)
-
可以使用
GetType
方法获取给定对象的System.Type
对象Dim t as System.Type t = obj.GetType() MessageBox.Show(t.FullName)
C# 中的类型转换
-
C# 是一种强类型语言。只要类型不匹配,就需要进行类型转换。
C# 中的常规类型转换遵循 C(++) 和 Java 语法
string s = (string)obj;
类型转换运算符适用于它右侧的整个链,因此在以下示例中,不是 a,而是 a.b 被转换为
Form
Form f = (Form)a.b;
要转换链的一部分,请使用方括号。在以下示例中,
obj
被转换为Form
string s = ((Form)obj).Text;
-
C# 知道一个附加的类型转换运算符:
as
。as
运算符就像一个类型转换,只是它在转换失败时产生 null 而不是引发异常。在以下情况下,btn
获得值null
Object obj = new TextBox(); Button btn = obj as Button;
-
可以使用
is
运算符来测试一个对象是否属于特定类型if (obj is TextBox) {...}
-
可以使用
typeof
运算符获取给定类型的System.Type
对象System.Type t; t = typeof(String); MessageBox.Show(t.FullName);
-
可以使用
GetType
方法获取给定对象的System.Type
对象System.Type t; t = obj.GetType(); MessageBox.Show(t.FullName);