所以我写的是严格用于个人学习的C#中的ORM.我循环遍历数据库,其中列名称与类的属性匹配.然后我循环遍历类的属性并分配相应的数据库列值,但我遇到了从数据库列转换返回值的问题.
var PropCollection = type.GetProperties();
foreach (PropertyInfo Property in PropCollection)
{
Property.SetValue(_t, DReader[Property.Name].ToString(),null);
}
Run Code Online (Sandbox Code Playgroud)
我得到了预期的错误:
"System.String"类型的对象无法转换为"System.Int32"类型.
其中DReader只是一个返回循环内部列值的SQLDataReader,假设这个值是一个int,我该怎么把它这样抛出?
Property.GetType();
Run Code Online (Sandbox Code Playgroud)
正确地知道我需要的类型,但我如何使用它来投射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);
}
Run Code Online (Sandbox Code Playgroud)