類型轉換是在編程過程中經常會遇到的。在這兩種語言中,有共同的方法,也有各自特有的方法。
共同的方法是Convert類的使用,因為Convert類是System命名空間中的。該類中包含了各種常見類型的轉換方法,比如ToInt32, ToSingle, ToBoolean等,這些方法的返回值就是需要的類型,不需要經過轉換。Convert類中通用的類型轉換方法是ChangeType,該方法返回具有指定類 型而且其值等效於指定對象的Object,這時候就需要對返回值進行顯示轉換了。
C#:
double d = 1.234
int i = (int)Convert.ChangeType(d,typeof(int));
VB.Net:
Dim d As Double = 1.234
Dim i As Integer = CInt(Convert.ChangeType(d,GetType(Integer)))
關於顯式轉換
C#中的顯式轉換的格式是(type)expression
用法:
double d = 1.234
int i = (int)d;
VB.Net中顯式轉換的格式是CType(expression,type)。MSDN中關於CType的解釋:CType 是一個“內聯函數”,這意味著轉換是 由已編譯的代碼執行的,通常不會生成函數調用。這將提高性能。
用法:
Dim d As Double = 1.234
Dim i As Integer = CType(d, Integer)
VB.Net中還有一系列函數與CType函數同屬於Conversion函數,例如CBool, CInt, CString, Hex, Format, Val等等,這些函數都是內聯函 數,具體的用法可以參考MSDN。
另外在VB.Net中還包含兩個特殊的轉換方法,DirectCast和TryCast。這兩個方法和CType的用法一樣,它們的區別見下表。
關鍵字 數據類型 參數關系 CType 任何數據類型 必須在兩種數據類型之間定義擴大轉換或收縮轉換 DirectCast 任何數據類型 一個類型必須繼承或者實現另一個類型 TryCast 僅引用類型 一個類型必須繼承或者實現另一個類型從上表可以看出,VB.Net的TryCast和C#的as作用是一樣的。
DirectCast示例(摘自MSDN):
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
TryCast示例(摘自MSDN):
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function