2022년 4월 21일 목요일

c# A function that changes the value of a specific class field(특정클래스 필드값 변경하는 함수)

/// <summary>
        /// 특정클래스의 field값을 변경하는 함수
        /// ex) m_PLC_Data.Field_Write(m_PLC_Data, "posX",100);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="exm"></param>
        /// <param name="valueName"></param>
        /// <param name="subject"></param>
        public void Field_Write<T>(T exm, string valueName, object subject)
        {
            //Type tp = typeof(T);
            Type tp = exm.GetType();
            FieldInfo[] flds = tp.GetFields(BindingFlags.Instance |
                                                 BindingFlags.NonPublic |
                                                 BindingFlags.Public |
                                                 BindingFlags.NonPublic);
            foreach (var t in flds)
            {
                if (valueName != t.Name)
                    continue;

                object point = t.GetValue(exm);
                if (point is int)
                    t.SetValue(exm, int.Parse(subject.ToString()));
                if (point is float)
                    t.SetValue(exm, float.Parse(subject.ToString()));
                if (point is string)
                    t.SetValue(exm, subject);
            }
        }


        /// <summary>
        /// 특정 클래스의 값을 읽어오는 함수
        /// ex) Console.WriteLine(m_PLC_Data.Field_GetValue(m_PLC_Data, "posX"));
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="exm"></param>
        /// <param name="valueName"></param>
        /// <returns></returns>
        public object Field_GetValue<T>(T exm, string valueName)
        {
            Type tp = exm.GetType();
            FieldInfo[] flds = tp.GetFields(BindingFlags.Instance |
                                                 BindingFlags.NonPublic |
                                                 BindingFlags.Public |
                                                 BindingFlags.NonPublic);

            object point = null;
            foreach (var t in flds)
            {
                if (valueName != t.Name)
                    continue;
                point = t.GetValue(exm);
                break;
            }

            return point;
        }

댓글 없음:

댓글 쓰기

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...