この場合、リフレクションはあなたの親友です。
以下は、プロパティコピー機の大まかな実装です。ターゲット タイプのインスタンスを新しく作成し、すべてのプロパティ値が設定されたソース インスタンスとともにこれに渡すだけです。
edit : Marc が指摘したように、これは単純なプロパティ マッピングに関してのみトリックを行います。一粒の塩でそれを取ります。
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace StackOverflow
{
public static class ReflectionHelper
{
public static void CopyPropertyValues(object source, object target)
{
if (source == null) throw new ArgumentNullException("source");
if (target == null) throw new ArgumentNullException("target");
var sourceType = source.GetType();
var targetType = target.GetType();
var sourceProperties = sourceType.GetProperties();
foreach (var sourceProperty in sourceProperties)
{
if (sourceProperty.CanRead)
{
var targetProperties = targetType.GetProperties();
foreach (var targetProperty in targetProperties)
{
if (targetProperty.Name == sourceProperty.Name &&
targetProperty.PropertyType == sourceProperty.PropertyType)
{
if (targetProperty.CanWrite)
{
var value = sourceProperty.GetValue(source, null);
targetProperty.SetValue(target, value, null);
}
break;
}
}
}
}
}
}
}