2010-06-17 102 views
1

我有一個執行某些操作的函數,即從數據庫中提取一些數據。 它需要的泛型是基本類型,例如int,char,bool,string等。我可以很容易地創建它的實例。但我無法將我從數據庫中提取的值設置爲此實例。將設置值設置爲原始類型的實例

public T PerformOperation<T>() 
{  
    object instance = (T)Activator.CreateInstance(typeof(T)); 

    object result=FetchData(); 

    instance = (T)result; //It gives error on this statement 
} 

該功能被稱爲:

int result = PerformOperation<int>(); 

有鑄造的對象類型的任何泛型類型這始終是原始的一些方法?

+0

什麼是錯誤?你最終試圖將其轉換爲一個不可能的int – 2010-06-17 05:05:51

+0

FetchData返回什麼類型? – SWeko 2010-06-17 05:21:02

+0

事實上 - 這可能是'Convert.ChangeType'的一個工作。 – 2010-06-17 05:34:07

回答

1

當你已經有類型T時,爲什麼把它變成不必要的對象。

public T PerformOperation<T>() 
{  
    T instance = (T)Activator.CreateInstance(typeof(T)); // why do you need this ? 

    T result = FetchData(); 

    //instance = (T)result; 
    return result; 
} 

或者可能是這種方式,如果您必須使用Object

public T PerformOperation<T>() 
{  
    //object instance = (T)Activator.CreateInstance(typeof(T));  
    //object result=FetchData(); 

    return (T)FetchData(); // If I could get you correctly. 
} 
+0

這就是我正在做的,但它拋出了特定的Cast Not Allowed的異常。 – 2010-06-17 05:43:52

+0

如果FetchData()在運行時返回一個「字符串」並且類型T是「int」,那麼肯定會得到該錯誤。你也應該使你的FetchData()泛型並且像這樣調用'T result = FetchData ();' – 2010-06-17 05:54:03

+0

我發現了這個錯誤。實際上它不能轉換從數據庫中獲取的十進制類型。所以Convert.ChangeType(result,typeof(T));在運行時將來自數據庫的數據轉換爲所需的類型。 非常感謝您的支持:) – 2010-06-17 06:04:17