为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…
Reference in New Issue
Block a user