我正在尝试使用 PetaPoco 将表转换为 POCO。
在我的表中,有一列名为TheEnum
。此列中的值是表示以下枚举的字符串:
public enum MyEnum
{
Fred,
Wilma
}
当 PetaPoco 试图将字符串“Fred”转换为MyEnum
value.
它在GetConverter
方法,在行中:
Convert.ChangeType( src, dstType, null );
Here, src
是“弗雷德”(astring
), and dstType
is typeof(MyEnum)
.
例外的是InvalidCastException
,说Invalid cast from 'System.String' to 'MyEnum'
我错过了什么吗?我需要先注册什么吗?
我通过将以下内容添加到中解决了这个问题GetConverter
method:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate( object src )
{
return Enum.Parse( dstType, (string)src ) ;
} ;
}
显然,我不想在每一行上运行这个委托,因为它会大大减慢速度。我可以将这个枚举及其值注册到字典中以加快速度,但在我看来,类似的东西可能已经存在于产品中。
所以,我的问题是,我需要做什么特殊的事情才能向 PetaPoco 注册我的枚举吗?
2012 年 2 月 23 日更新
I 提交了补丁 https://github.com/toptensoftware/PetaPoco/pull/77有一段时间了,但还没有被拉进去。如果你想使用它,请查看补丁并合并到你自己的代码中,或者只获取代码从这里 http://stevedunns.blogspot.com/2011/08/fast-way-of-converting-c-enums-to.html.