C#で異なるクラス間のプロパティ値コピー

 from https://fox-net.hatenablog.com/entry/2018/02/25/184657



Entityframeworkを使っていると、
ViewModelとDomainModel間で同名のプロパティをコピーしたい!
なんてことよくありますよね。

というわけで、作ってみました。


今回は拡張メソッドにしてみます。

public static class Extention
{
    public static void CopyProperty(this object toObject, object fromObject)
    {
        // コピー元、コピー先のプロパティ情報を取得
        PropertyInfo[] fromProperties = fromObject.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
        PropertyInfo[] toProperties = toObject.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (var fromProperty in fromProperties)
        {
            // 名前と型が同じプロパティを取得
            PropertyInfo target = Array.Find(toProperties, to => to.Name.Equals(fromProperty.Name)
                                             && to.PropertyType.Equals(fromProperty.PropertyType));

            // プロパティ値コピー
            if (target != null)
                target.SetValue(toObject, fromProperty.GetValue(fromObject));
        }

    }
}







留言

熱門文章