Convert.ChangeType的更快版本

Eri*_*ich 11 c#

在我拥有的应用程序中,Convert.ChangeType为了将值转换为动态加载类型,我正在进行频繁的调用.

然而,在使用ANTS进行分析后,我发现这Convert.ChangeType似乎占用了相当长的一部分时间(由于被频繁调用).有没有人有更快的替代方法呢?

此时我有一个包含目标的类型对象,以及一个string包含该值的对象.

以下是违规代码.我正在考虑在类型上做一个switch语句(因为它是一个有限的类型集合)并调用解析方法,虽然我不确定它是否会更快.

if(attributeRow["Value"]!=DBNull.Value)
    sample[attr] = attr.AttributeType == typeof(Guid)
                 ? new Guid(attributeRow["Value"].ToString())
                 : (IComparable)Convert.ChangeType(attributeRow["Value"],attr.AttributeType);
Run Code Online (Sandbox Code Playgroud)

Cra*_*gTP 9

我不知道框架本身内有任何其他功能来改变除Convert.ChangeType函数之外的类型(显然是显式转换).

为此,我认为唯一的另一种改进方法是滚动自己的ChangeType功能,该功能专门针对您的特定情况进行了优化(如果可能).

你提到你正在使用有限数量的类型,也许你比其他类型更多地处理一种类型?如此,您的ChangeType功能可以优化以首先尝试此特定转换,并且只有在失败时才尝试其他转换.您提到尝试切换样式的代码块,并且可以将相同的方法(尝试最常用的Type)应用于此.至于它是否会更快将取决于您正在处理的数据(以及您要转换/转换的类型的频率/可变性),唯一真正的衡量方法是尝试并将其分析到与Convert.ChangeType方法论比较.

如果您正在寻找自己的功能,那么一个有趣的链接是在Peter Johnson的博客上:

Convert.ChangeType不处理nullables

请务必阅读该帖子的所有评论.