2010-01-21 75 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