首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 與 VB.NET 類型系統關鍵字大對照:GetType、typeof、is、as、轉換與空值處理

     編輯:關於C#

兩大 .NET 語言在類型檢查、轉換、空值處理上關鍵字雖同名但語意不同,初學者極易混淆。本文系統整理 9 大主題,附雙語言對照表與 IL 驗證細節。

1. 取得 Type 物件:三種途徑

方式C#VB.NET說明
實例方法obj.GetType()obj.GetType()回傳執行期確切類型
關鍵字/運算子typeof(int)GetType(Integer)編譯期靜態取得,無實例開銷
靜態方法Type.GetType("System.Int32")Type.GetType("System.Int32")字串載入,需完整命名空間

陷阱:VB 的 GetType 關鍵字對應 C# 的 typeof,而非 obj.GetType()。

2. typeof / TypeOf 差異


// C#
Type t = typeof(int);           // 靜態取得 Type
bool b = obj is int;            // 型別相容檢查
string s = obj as string;       // 安全轉換,失敗回傳 null

' VB.NET
Dim t As Type = GetType(Integer) ' 靜態取得 Type
Dim b As Boolean = TypeOf obj Is Integer ' 型別相容檢查(僅參考類型)
Dim i As Integer = 3
Dim obj As Object = i
Console.WriteLine(TypeOf obj Is Integer) ' True

3. is / Is 語意截然不同

語言關鍵字用途範例
C#is型別相容檢查(含繼承、介面、拆箱)obj is IDisposable
VBIs參考相等比較(等同 C# ReferenceEquals)obj1 Is obj2

⚠️ VB 的 TypeOf ... Is 才對應 C# 的 is。

4. as / As 用法天差地別

  • C# as:安全參考轉換,失敗回傳 null(僅參考/可為 null 型別)
  • VB As:宣告子句(變數、參數、泛型約束),非運算子

5. 類型轉換完整對照

分類C#VB.NET備註
隱含轉換自動自動無資料遺失
顯式轉換(int)dCType(d, Integer) / CInt(d)VB CType 為內聯函式,效能佳
Convert 類別Convert.ToInt32(o)Convert.ToInt32(o)共用,處理 null、格式轉換
Parse 系列int.Parse(s) / int.TryParseInteger.Parse(s) / Integer.TryParse字串→數值,TryParse 避免例外
安全轉換o as stringTryCast(o, String)失敗回傳 null/Nothing
強制轉換(string)oDirectCast(o, String)需繼承關係,否則拋出例外

6. 空值關鍵字:null vs Nothing

特性C# nullVB Nothing
語意參考類型無值任何類型的預設值
值類型指派int? x = null(需可為 null)Dim i As Integer = Nothing → 0
比較運算子== null / != null= Nothing / Is Nothing / IsNot Nothing
預設值取得default(int) → 0Nothing 即為預設值

VB 編譯器會自動將 Nothing 依語境轉為 0、False、""、null,C# 需顯式使用 default(T)。

7. 可為 Null 的實值類型


// C#
int? a = null;
bool has = a.HasValue;
int val = a.GetValueOrDefault();
int val2 = a ?? 5; // null 聯合運算子

' VB.NET (VS2017+)
Dim a? As Integer = Nothing
Dim has = a.HasValue
Dim val = a.GetValueOrDefault()
Dim val2 = If(a, 5) ' 無 ?? 運算子,用 If

8. DBNull 與 null/Nothing 的區別


// 資料庫欄位為 NULL 時,回傳 DBNull.Value
object val = row["Column"];
if (val != DBNull.Value) { /* 有資料 */ }

// VB
If row("Column") IsNot DBNull.Value Then ...

DBNull.Value == null → false,兩者完全不同物件。

9. 速查表:常見情境對應寫法

情境C#VB.NET
判斷物件為特定類型obj is MyClassTypeOf obj Is MyClass
安全轉換並檢查var s = obj as string; if(s!=null)...Dim s = TryCast(obj, String); If s IsNot Nothing Then...
字串轉整數(含錯誤處理)int.TryParse(s, out int v)Integer.TryParse(s, v)
取得型別預設值default(T)Nothing
可為 null 實值類型取值或預設nullable ?? fallbackIf(nullable, fallback)

結語

掌握雙語言關鍵字的**語意邊界**,能避免移植程式碼時的邏輯錯誤。核心口訣:C# 重「運算子」,VB 重「宣告/函式」;C# null 唯參考,VB Nothing 通吃預設值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved