为Object增加SetPropertyValue方法,通过该方法为对象的每一个属性设置值。一般用在测试环境下为接口对象赋值
This commit is contained in:
		
							parent
							
								
									ee4854787e
								
							
						
					
					
						commit
						eb66061fa2
					
				@ -104,6 +104,28 @@ namespace Falcon.SugarApi
 | 
			
		||||
        /// <param name="obj">要测试的对象</param>
 | 
			
		||||
        /// <returns>True表示对象不为null,否则为null</returns>
 | 
			
		||||
        public static bool IsNotNull([AllowNull] this object obj) => !obj.IsNull();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 为对象属性设置属性值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="obj">要设置的对象</param>
 | 
			
		||||
        /// <param name="GetValue">通过属性和原始值获取新值的方法委托</param>
 | 
			
		||||
        /// <exception cref="ObjectSetValueException">设置属性值引发的异常</exception>
 | 
			
		||||
        public static T SetPropertyValue<T>(this T obj,Func<PropertyInfo,object?,object?> GetValue) where T : class {
 | 
			
		||||
            foreach(PropertyInfo info in obj.GetType().GetProperties()) {
 | 
			
		||||
                if(info.CanWrite&&info.CanRead) {
 | 
			
		||||
                    object? originalVal = info.GetValue(obj);
 | 
			
		||||
                    var val = GetValue(info,originalVal);
 | 
			
		||||
                    try {
 | 
			
		||||
                        info.SetValue(obj,val);
 | 
			
		||||
                    }
 | 
			
		||||
                    catch(Exception ex) {
 | 
			
		||||
                        throw new ObjectSetValueException(obj,info,val,ex);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
@ -125,4 +147,37 @@ namespace Falcon.SugarApi
 | 
			
		||||
        public object? Value { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 为目标属性设置值时引发的异常
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class ObjectSetValueException:Exception
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 为目标属性设置值时引发的异常
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="obj">目标对象</param>
 | 
			
		||||
        /// <param name="info">属性</param>
 | 
			
		||||
        /// <param name="val">目标属性值</param>
 | 
			
		||||
        /// <param name="innExceprtion">内部异常</param>
 | 
			
		||||
        public ObjectSetValueException(object? obj,PropertyInfo? info,object? val,Exception innExceprtion)
 | 
			
		||||
            : base("为目标属性设置值时引发的异常",innExceprtion) {
 | 
			
		||||
            this.Obj=obj;
 | 
			
		||||
            this.Property=info;
 | 
			
		||||
            this.Value=val;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 目标对象
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public object? Obj { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 目标属性
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public PropertyInfo? Property { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 目标属性值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public object? Value { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user