After retrieving data from a database I find myself doing this to create a domain object from the data in a `DataRow` (in this case, a 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");

```

As I soon felt of course, I am doing this over and over in pseudo-code:

```
myDvd.field = drDvd.Field<field.type>(field.name);

```

And I wondered if I could get it into a loop, however I've never used reflection before. The code I tried is this:

```
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));
}

```

The problem is, as you may know, that the extension for the `Field` method of class `DataRow` does not accept a variable and needs to be explicitely filled in.

I am not that experienced in C# so I would like to pose the following two questions:

1. **Is it good practice what I am trying to do?**
2. **How can I fill in the correct extension** for `Field<extension>(name)`?