为对象增加默认测试属性值

This commit is contained in:
FalconFly 2023-11-06 12:02:10 +08:00
parent 6dc3ef807b
commit 50b87ed420

View File

@ -173,6 +173,41 @@ namespace Falcon.SugarApi
}
return r;
}
/// <summary>
/// 为对象设置测试值。
/// </summary>
/// <typeparam name="T">对象的类型</typeparam>
/// <param name="source">原始对象可以为null</param>
/// <param name="targetBuilder">可选,为目标对象复制</param>
/// <returns>设置了测试值的对象</returns>
public static T? ToTest<T>(this T? source,Action<T>? targetBuilder = null) where T : class, new() {
var type = typeof(T);
var typeName = type.FullName;
if(typeName.IsNullOrEmpty()) {
throw new Exception("typeof(T).FullName is null,can not createInstance!");
}
var obj = type.Assembly.CreateInstance(typeName) as T ?? throw new Exception("创建目标对象失败!");
foreach(PropertyInfo p in type.GetProperties()) {
if(!p.CanWrite || !p.CanRead) {
continue;
}
//如果属性为字符串
if(p.PropertyType == typeof(string)) {
var val = source == null ? null : p.GetValue(source) as string;
if(val.IsNullOrEmpty()) {
p.SetValue(obj,p.Name);
}
else {
p.SetValue(obj,val);
}
continue;
}
//其他类型属性不做处理
}
targetBuilder?.Invoke(obj);
return obj as T;
}
}
/// <summary>