【发布时间】:2012-04-28 13:37:20
【问题描述】:
从数据库中检索数据后,我发现自己这样做是为了从 DataRow(在本例中为 DVD)中的数据创建域对象:
DataRow drDvd = myDataTable.Rows[0];
Dvd myDvd = new Dvd();
myDvd.id = drDvd.Field<long>("id");
myDvd.title = drDvd.Field<string>("title");
myDvd.description = drDvd.Field<string>("description");
myDvd.releaseDate = drDvd.Field<DateTime>("releaseDate");
我很快就感觉到,我在伪代码中一遍又一遍地这样做:
myDvd.field = drDvd.Field<field.type>(field.name);
我想知道我是否可以让它进入一个循环,但是我以前从未使用过反射。我试过的代码是这样的:
Dvd aDvd = new Dvd();
Type t = aDvd.GetType();
FieldInfo[] fields = t.GetFields();
foreach (FieldInfo fi in fields)
{
fi.SetValue(aDvd, drDvd.Field<fi.FieldType>(fi.Name));
}
问题在于,您可能知道,DataRow 类的 Field 方法的扩展不接受变量,需要明确填写。
我对 C# 的经验不是很丰富,所以我想提出以下两个问题:
- 我正在尝试做的事情是好的做法吗?
-
如何为
Field<extension>(name)填写正确的扩展名?
【问题讨论】:
-
如果你正在做大量的反射,请考虑使用fast-member:nuget.org/packages/FastMember一定要通过它的单元测试来了解如何使用它。
标签: c# reflection types extension-methods field