データベースからデータを取得した後、次のようにして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));
}
問題は、ご存知かもしれませんがField
、クラスのメソッドの拡張DataRow
が変数を受け入れず、明示的に入力する必要があることです。
私は C# の経験があまりないので、次の 2 つの質問をしたいと思います。
- 私がやろうとしていることは良い習慣ですか?
- の正しい拡張子を入力するにはどうすればよい
Field<extension>(name)
ですか?