讓GetType()可以支援switch語法

因為某種資料庫欄位型別自動化轉換問題,因此需要利用GetType()進行欄位類型的分析,例如如果是string就OO,如果是Int32就XX...等。乍聽之下好像很簡單,只要去GetType()後再利用typeof()去比對就好,當然,這樣的想法在傳統的if下是沒有問題的,但在switch下卻是無法執行。

傳統的GetType()上switch陳述式寫法

switch (oTemp.GetType().ToString())
{
  case "System.String":
    ...
    break;
  case "System.Int32":
    ...
    break;
  case "System.DateTime":
    ...
    break;
}

看一下上面的程式碼,看起來還算簡潔,但是case那邊的字串實在看起來讓人覺得很礙眼,不僅無法使用IntelliSense來撰寫,以字串的型態來判斷的話,容易因為打錯字而在執行期才把臭蟲爆出來,這簡直是無奈啊!

利用GetTypeCode來支援switch語法

好在天無絕人之路,萬能的.NET Framework在1.1時期就有支援System.Type.GetTypeCode,用以求取.NET基礎類型(原生型別),這簡直是太棒了。但是不要高興得太早,如果是自訂的型別(Custom Class)就只能殘念了。

範例程式碼請看下方:

switch (System.Type.GetTypeCode(oTemp.GetType()))
{
  case System.TypeCode.String:
    ...
    break;
  case System.TypeCode.Int32:
    ...
    break;
  case System.TypeCode.DateTime:
    ...
    break;
}

可以回歸用C#的列舉(Enum)來表示雀屏中選的型別,這代表可以大方的使用IntelliSense來協助你寫程式,這下再也不用怕手殘打錯字了,真是太妙了!

參考連結:MSDN System.TypeCode Enum

C# ValueType GetType() typeof() Switch SelectionStatement