프로그래밍/C#

[C#] 객체의 값 변경된 내용만 추출하기

흔한티벳여우 2021. 5. 11. 11:15
반응형

Log 처리에 모든 값을 다 넣으면 좋긴하겠지만 객체의 내용이 너무나 많다면 보기에도 부담되고 데이터 쌓을때도 부담된다.

어떻게 할까 고민하다가 타겟과 소스를 기준으로 양 객체 데이터를 기반으로 변경된 값만 추출하는 함수를 만들었다.

 

private Dictionary<string, object> DictionaryFromType(object atype)
{
    if (atype == null) return new Dictionary<string, object>();
    Type t = atype.GetType();
    PropertyInfo[] props = t.GetProperties();
    Dictionary<string, object> dict = new Dictionary<string, object>();
    foreach (PropertyInfo prp in props)
    {
        object value = prp.GetValue(atype);
        dict.Add(prp.Name, value);
    }
    return dict;
}

public string PropertyChangeLog(object src, object obj, string ignoreObject = "")
{
    StringBuilder sb = new StringBuilder();

    var source = DictionaryFromType(src);
    var target = DictionaryFromType(obj);
    try
    {
        foreach (var it in target)
        {
            if(ignoreObject != it.Key)
            {
                object sourceValue = source[it.Key];
                if (sourceValue.ToString() != it.Value.ToString())
                {
                    sb.Append(it.Key.ToString());
                    sb.Append(": ");
                    sb.Append(source[it.Key].ToString());
                    sb.Append(" => ");
                    sb.Append(it.Value.ToString());
                    sb.Append(" ");
                }
            }                    
        }
    }
    catch (Exception ex)
    {
        string error = ex.ToString();
    }

    return sb.ToString();
}
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] Object 안에 Array 데이터 가져오기  (1) 2021.07.21
N * M * K .. 다중 루프  (0) 2021.07.05
[C#] Path에서 각종 경로 추출  (0) 2021.06.15
[C#] 디자인패턴 - Singleton  (0) 2021.05.11
Modbus RTU 구현  (11) 2020.09.14