gpt4 book ai didi

c# - 使用反射编写 ORM 无法正确转换

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:35 26 4
gpt4 key购买 nike

所以我正在编写 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com