2010-01-21 80 views
1

我有以下的擴展方法鑄造/類型的轉化效果

public static T Field<T>(this DataRow row, string columnName) 
{ 
    return (T)Convert.ChangeType(row[columnName], typeof(T)); 
} 

它的工作原理,但我試圖加快速度。有沒有辦法加快速度?用case語句,然後鍵入特定的轉換?我已經嘗試了一些使用int.Parse的東西,但即使我知道我想要返回一個int,但我必須使用ChangeType才能編譯它。

return (T)Convert.ChangeType(intVal, typeof(T)); 

回答

4

您是否確實需要執行轉換,或者您只是在投射?

如果你只是需要一個演員,然後一個簡單的return (T)row[columnName];應該做的伎倆。 (順便說一下,使用Convert.ChangeType真的會導致性能問題?這聽起來像是對我不必要的微型優化。說了這麼多,我可能更喜歡普通的演員出於可讀性原因,假設它符合您的要求。 )

+0

@Luke,普通投射不總是工作,而Convert.ChangeType似乎總是返回正確的值,無論我扔在它的類型。 – CaffGeek 2010-01-21 17:30:06

+0

@Chad:你可以舉一些鑄造不行的例子,但是'ChangeType'呢?例如,什麼是列的基礎類型/值,以及您嘗試將其轉換爲哪種類型? – LukeH 2010-01-21 17:32:38

+0

底層類型不盡相同,但它們應該總是可以轉換爲以下之一:string,int,bool,DateTime,byte,float,decimal。 – CaffGeek 2010-01-21 17:43:05