typeof 運算子 在編譯期取得型別的 System.Type 物件,運算元必須為型別名稱(非運算式/變數)。
using System;
class Test {
static void Main() {
Console.WriteLine(typeof(int)); // System.Int32
Console.WriteLine(typeof(System.Int32)); // System.Int32
Console.WriteLine(typeof(string)); // System.String
Console.WriteLine(typeof(double[])); // System.Double[]
}
}
typeof(T) 結果為常數,可用於屬性參數、switch、預設參數值。typeof(int) == typeof(System.Int32) 為 true。typeof(List<>) ❌;需用 typeof(List<int>) 或 typeof(List<>).GetGenericTypeDefinition()。.cctor)。typeof vs GetType()| typeof(T) | obj.GetType() | |
|---|---|---|
| 時機 | 編譯期 | 執行期 |
| 運算元 | 型別名稱 | 物件實例 |
| 多型 | 靜態型別 | 動態型別 |
| null 安全 | N/A | 擲 NullReferenceException |