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

时间:2019-10-21 02:59:32

标签: c# reflection types casting

我有一种将using System; using System.Threading; using System.Diagnostics; namespace MyChildProcess { class Program { static void Main(string[] args) { try { // Representing some time consuming work. Thread.Sleep(5000); EventWaitHandle.OpenExisting("CHILD_PROCESS_READY") .Set(); Process.GetProcessById(Convert.ToInt32(args[0])) .WaitForExit(); } catch (Exception exception) { } } } } 转换为DataTable的方法。直到我在List<T>数据库中拥有bit列之前,它一直运行良好。无法将MySql的值bit转换为1类型的C#。所以我尝试将其转换为

bool

其中Convert.ChangeType(value, prop.PropertyType); 是数据库返回的内容,而value中的propPropertyInfo的位置。

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

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

  

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

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

1 个答案:

答案 0 :(得分:2)

您可以在if语句中检查prop.PropertyType.IsEnum并像这样使用Enum.ToObject

if (prop.PropertyType.IsEnum)
{
    return Enum.ToObject(prop.PropertyType, value);
}
else
{
    return Convert.ChangeType(value, prop.PropertyType);
}