使用反射从“System.Int32”到 Enum 的无效转换

Ima*_*mad 1 c# reflection types casting

我有一个方法可以转换DataTableList<T>. 它工作正常,直到bit我的MySql数据库中有列。无法将bitvalue转换1C#type bool。所以我试着把它转换成

Convert.ChangeType(value, prop.PropertyType);
Run Code Online (Sandbox Code Playgroud)

这里value是一些数据库返回,propPropertyInfo那里value将被分配。

它工作正常,但它破坏了枚举的添加方式。

例如,以前我能够将整数分配给 enum 字段,但现在出现错误

从“System.Int32”到“EnumsAndConstants.QuestionType”的无效转换。

我知道一种解决方案value只能在TypeCastingException发生时转换为类型,但我根本不希望发生异常。是否有适用于所有类型的具体解决方案?

Kei*_*ein 6

你可以签prop.PropertyType.IsEnum入一个if语句并使用Enum.ToObject如下:

if (prop.PropertyType.IsEnum)
{
    return Enum.ToObject(prop.PropertyType, value);
}
else
{
    return Convert.ChangeType(value, prop.PropertyType);
}
Run Code Online (Sandbox Code Playgroud)