gpt4 book ai didi

c# - 使用任何(指定的)对象集合在不反射的情况下填充 IDataReader

转载 作者:行者123 更新时间:2023-11-30 18:22:26 25 4
gpt4 key购买 nike

本以为很容易实现的事情我却努力去完成

假设我有一个汽车对象

public class tblCarObj
{
public String Model;
public Int32 Year;
}

在这些行中有一个 reflection 的实现这是基于对象成员未知的事实(这是唯一的原因吗?)

这对于通用功能来说很好,但如果需要,我会牺牲功能来换取性能。我想知道为什么两个链接(见下文)都使用这种方法。

我可以简单地使用 MyCarReader<tblCarObj> 吗?

代替

    //for this instance.        
private IEnumerator<T> enumerator = null;

//List of all public fields in <T>
private List<FieldInfo> fields = new List<FieldInfo>();

public MyGenericDataReader(IEnumerable<T> enumerator)
{
this.enumerator = enumerator.GetEnumerator();

//Find the enumerator of all public fields
foreach (FieldInfo fieldinfo in typeof(T).GetFields(
BindingFlags.Instance |
BindingFlags.Public))
{
fields.Add(fieldinfo);
}
}

有没有办法不使用反射来实现这个方法?

背景

任务是简单地将一组对象上传到数据库表中,

List<tblCarObj>

哪里:

  • 数据库表准备就绪
  • 数据库表与数据对象成员相匹配
  • 两者在编译时都是已知的。

并直接在 SQLBulckCopy 上使用它而不是更复杂的对象,例如 DataTable

最佳答案

您要求运行时和编译器做一些如果不反射(reflect)类型就不能做的事情。

允许 CLR 和编译器了解类型的属性的信息位于类型的元数据中。反射是一种查询元数据并以有意义的方式提供元数据的机制,以便我们可以使用它来发现类型的形状和内容。没有它,类型本质上就是一个命名的黑盒子。

可以做您想做的事,但您必须手动编写代码。存在这些库的原因是因为反射可以让您避免额外的工作。

关于c# - 使用任何(指定的)对象集合在不反射的情况下填充 IDataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925260/

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