public void SetMember(object obj, EnumMemberValue enumMemberValue)
        {
            PropertyInfo propertyInfo = null;
            object       currentObj   = obj;

            for (int i = 0; i < this._memberNames.Length; i++)
            {
                if (i == this._memberNames.Length - 1)
                {
                    propertyInfo = currentObj.GetType().GetProperty(this._memberNames[i]);
                }
                else
                {
                    currentObj = currentObj.GetType().GetProperty(this._memberNames[i]).GetValue(currentObj, null);
                    if (currentObj == null)
                    {
                        return;
                    }
                }
            }
            if (propertyInfo == null)
            {
                return;
            }
            object value;

            if (enumMemberValue == EnumMemberValue.NewValue)
            {
                value = this.NewValue;
            }
            else
            {
                value = this.OldValue;
            }
            try
            {
                if (propertyInfo.CanWrite)
                {
                    if (propertyInfo.PropertyType.IsEnum)
                    {
                        propertyInfo.SetValue(currentObj, Enum.Parse(propertyInfo.PropertyType, value.ToString()), null);
                    }
                    else
                    {
                        propertyInfo.SetValue(currentObj, value, null);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Assert(false, ex.Message);
            }
        }
        /// <summary>
        /// 为指定的对象设置属性(Property)值
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="enumMemberValue"></param>
        public void SetMember(object obj, EnumMemberValue enumMemberValue)
        {
            PropertyInfo propertyInfo = null;
            object       currentObj   = obj;

            for (int i = 0; i < this._memberNames.Length; i++)
            {
                //如果已经到了属性(Property)路径的底层
                if (i == this._memberNames.Length - 1)
                {
                    propertyInfo = currentObj.GetType().GetProperty(this._memberNames[i]);
                }
                else
                {
                    //如果还没有到路径底层
                    currentObj = currentObj.GetType().GetProperty(this._memberNames[i]).GetValue(currentObj, null);

                    //此时currentObj有可能为null,如窗体元素的字体,就可能发生为null的情况
                    //但是照正常逻辑,应该不会出现这种情况,这里还是做个判断,防止程序意外出错
                    if (currentObj == null)
                    {
                        return;
                    }
                }
            }

            if (propertyInfo == null)
            {
                return;
            }

            object value;

            if (enumMemberValue == EnumMemberValue.NewValue)
            {
                value = this.NewValue;
            }
            else
            {
                value = this.OldValue;
            }

            try
            {
                if (propertyInfo.CanWrite)
                {
                    if (propertyInfo.PropertyType.IsEnum)
                    {
                        propertyInfo.SetValue(currentObj, Enum.Parse(propertyInfo.PropertyType, value.ToString()), null);
                    }
                    else
                    {
                        propertyInfo.SetValue(currentObj, value, null);

                        //忘了当时为什么要加Convert.ChangeType
                        //try
                        //{
                        //在调用Convert.ChangeType 时,被转换的对象必须实现 IConvertible
                        //propertyInfo.SetValue(currentObj, Convert.ChangeType(value, propertyInfo.PropertyType), null);
                        //}
                        //catch (InvalidCastException ex)
                        //{
                        //    Debug.Assert(false, ex.Message);
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Assert(false, ex.Message);
            }
        }