【发布时间】:2011-10-14 14:13:41
【问题描述】:
我正在尝试使用 PetaPoco 将表格转换为 POCO。
在我的表中,我有一个名为 TheEnum 的列。此列中的值是表示以下枚举的字符串:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco 在尝试将字符串“Fred”转换为 MyEnum 值时出现窒息。
它在GetConverter 方法中执行此操作,在以下行中:
Convert.ChangeType( src, dstType, null );
这里,src 是“Fred”(string),dstType 是 typeof(MyEnum)。
例外是InvalidCastException,表示Invalid cast from 'System.String' to 'MyEnum'
我错过了什么吗?有什么需要先注册的吗?
我通过将以下内容添加到 GetConverter 方法中解决了这个问题:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate( object src )
{
return Enum.Parse( dstType, (string)src ) ;
} ;
}
显然,我不想在每一行都运行这个委托,因为它会大大减慢速度。我可以将此枚举及其值注册到字典中以加快速度,但在我看来,类似的东西可能已经在产品中了。
所以,我的问题是,我是否需要做一些特别的事情来向 PetaPoco 注册我的枚举?
2012 年 2 月 23 日更新
我不久前submitted a patch,但它还没有被拉进来。如果你想使用它,查看补丁并合并到你自己的代码中,或者直接获取代码from here。
【问题讨论】:
-
2012 年 6 月 28 日更新尚未应用确切的补丁,但在 v5 branch 中添加了类似的代码。另见toptensoftware.com/Articles/137/…
-
如果对你来说不难,请把补丁也提交给 npoco。我建议您切换到 npoco,因为它的开发更加活跃,并且拥有 PetaPoco 拥有的所有功能,甚至更多。
-
2014 年 9 月 9 日更新 @iano 答案是最新 5.0.2 版本的正确答案。