2015年2月12日 星期四

不能直接從 Object 轉成 Enum 型別

最近遇到一個問題, 就是從 SqlDataReader 讀到的整數轉成 Enum 型別會有 exception
試過轉型成 String 沒甚麼問題, 但就是轉成 Enum 型別會出錯

後來發現因為都是用下標運算子去存取 DataReader, 所以拿到的型別是 Object
而在 DataBase 中存取的整數欄位型別是 TinyInt, 也就是 byte 型別
經過實驗才發現, 原來 Object 中存放 byte 型別時, 不能直接轉型成 Enum
Object 只有存放 int 型別時才能直接轉型成 Enum

public enum E
{
    E1
}

byte b = 1;
Object o = b;
E e = (E)o;    // Exception!!

int i = 1;
o = i;
E e = (E)o;    // Works find!

沒有留言:

張貼留言