オブジェクトを特定の型に変換するために使用できる次のメソッドがあります。
public static TTarget Convert<TTarget>(object source) where TTarget : new()
{
var target = new TTarget();
Type targetType = typeof (TTarget);
foreach (PropertyInfo sourceProperty in source.GetType().GetProperties())
{
if (!sourceProperty.CanRead || (sourceProperty.GetIndexParameters().Length > 0))
continue;
PropertyInfo targetProperty = targetType.GetProperty(sourceProperty.Name);
if ((targetProperty != null) && (targetProperty.CanWrite))
targetProperty.SetValue(target, sourceProperty.GetValue(source, null), null);
}
return target;
}
プロパティが値型などである単純なクラスでは問題なく機能しますが、別のクラスにマップする必要がある複雑なプロパティでは、どうすればよいかわかりません。マッピングを静的プロパティに保存すると:
private static Dictionary<Type, Type> Mappings;
static TypeConverter()
{
Mappings = new Dictionary<Type, Type>
{
{typeof (DbSpace), typeof (DmsSpace)},
{typeof (DbDirectory), typeof (DmsDirectory)},
{typeof (DbFile), typeof (DmsFile)}
};
}
この情報を利用して複雑なプロパティを変換する方法を見つける方法が見つからないようです。上記のマッピングを使用して複雑なプロパティを変換するにはどうすればよいですか?
問題の核心は、オブジェクトnew
しか持っていない場合、どのように呼び出すことができるかということです。Type