所以我正在编写 C# 中的 ORM,严格来说是为了个人学习。我正在遍历一个数据库,其中的列名与类的属性相匹配。然后我遍历类的属性并分配相应的数据库列值,但我遇到了从数据库列中转换返回值的问题。
var PropCollection = type.GetProperties();
foreach (PropertyInfo Property in PropCollection)
{
Property.SetValue(_t, DReader[Property.Name].ToString(),null);
}
我得到了预期的错误:
Object of type 'System.String' cannot be converted to type '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);
}
关于c# - 使用反射编写 ORM 无法正确转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8906278/