使用反射编写ORM无法正确地进行强制转换



所以我在C#中写一个ORM,严格来说是为了个人学习。我在数据库中循环,其中的列名与类的属性相匹配。然后,我循环遍历类的属性并分配相应的数据库列值,但在从数据库列转换返回值时遇到了问题。

var PropCollection = type.GetProperties();
foreach (PropertyInfo Property in PropCollection)
{
    Property.SetValue(_t, DReader[Property.Name].ToString(),null);
}

我得到预期的错误:

"System.String"类型的对象无法转换为类型"System.Int32".

如果DReader只是一个SQLDataReader,在循环中返回一个列值,假设这个值是int,我该如何将其强制转换为这样的值??

Property.GetType();

正确地知道我需要的类型,但我如何使用它来强制转换DReader[Property.Name]

Convert.ChangeType可以处理所有的直接转换。

您不应该在循环中使用DReader[Property.Name].ToString()。卸下ToString()

var PropCollection = type.GetProperties();
foreach (PropertyInfo Property in PropCollection)
{
    var value = DReader[Property.Name];
    if (!Property.GetType().IsAssignableFrom(value.GetType())
        value = Convert.ChangeType(value, Property.GetType());
    Property.SetValue(_t, value, null);
}

相关内容

  • 没有找到相关文章

最新更新