【发布时间】:2012-05-16 14:34:37
【问题描述】:
所以我有数千个通用类型 T 的对象,我想将它们转换为我得到的对象数组。 所以我必须获取属性列表 T,并为每个属性设置值到数组上的相应对象
for (int i = 0; reader.Read(); i++)
{
T tmp = (T)Activator.CreateInstance(typeof(T));
foreach (var prop in properties)
{
prop.SetValue(tmp, reader.GetValue(reader.GetOrdinal(prop.Name)), null);
}
}
reader 是一个 DataReader。我遇到的问题是 prop.SetValue 非常慢(消耗了总执行时间的 50%),I've been told 使用动态方法或表达式树,我尝试使用表达式树但是从什么我知道我必须为我要设置的每个值生成一棵树,这不是很好。 所以动态方法是另一种选择。理想情况下,我需要创建一个方法 SetProp(object, propertyName, value),我可以一遍又一遍地重用它。
【问题讨论】:
-
就个人而言,我会说“不要在每个单元格中使用 GetOrdinal”,尽管这并不重要 - 但是,因为这显然是“数据阅读器” " 属性名和列名 1:1 匹配的代码,我真的建议你看看 dapper-dot-net;它专为正是这种场景而设计,并且使数据访问变得轻松。它是我们在 Stack Overflow 上编写并广泛用于大部分数据访问的工具。
标签: c# reflection