2019年2月15日金曜日

[.NET]オブジェクト内に同じプロパティがあった場合、同じ値をセットする

①以下のような関数を作成。
------------------------------------------------

/// <summary>
/// 同じプロパティから同じ値をセットします
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="self"></param>
/// <param name="Frommodel"></param>
public static void CopyFromSameProperty<T>(this T self, object Frommodel, List<string> Lstexcept = null)
        {
            PropertyInfo[] propertyInfo = Frommodel.GetType().GetProperties();
            foreach (PropertyInfo p in propertyInfo)
            {
                if (Lstexcept != null && Lstexcept.Contains(p.Name)){ continue; }

                //コピー元
                var arg = p.GetValue(Frommodel, null);
                //コピー先
                PropertyInfo pTo = self.GetType().GetProperty(p.Name);
                if (pTo != null)
                {
                    pTo.SetValue(self, arg);
                }

            }
}
------------------------------------------------
②使い方は以下。
------------------------------------------------
// ベースとなる行
var baseRow = db.T_hoge.Where(d => d.番号 == 1234).FirstOrDefault();
var newRow = new T_hoge();

newRow.CopyFromSameProperty(baseRow); //一度全項目コピーする
------------------------------------------------

※「このプロパティはコピーしたくない!」というものがあるならば
 以下の様にプロパティ名を指定すればOK
newRow.CopyFromSameProperty(baseRow, new List<string> { "番号" }); //一度全項目コピーする



0 件のコメント:

コメントを投稿