/// <summary>
/// 复制基本属性值,不包含导航属性
/// </summary>
/// <typeparam name="T">Entity type</typeparam>
/// <param name="source">Source entity object</param>
/// <param name="dest">Destination entity object</param>
public T CopyBasicProperties<T>(object source) where T : new()
{
T dest = new T();
try
{
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead && p.CanWrite && p.PropertyType.FullName.Contains("System") == true);
foreach (var property in properties)
{
try
{
if (property.GetSetMethod() == null) continue;
object value = GetPropertyValue(source, property.Name);
property.SetValue(dest, value, null);
}
catch (Exception ex)
{}
}
}
catch (Exception ex)
{
throw ex;
}
return dest;
}/// <summary>
/// 通过反射,返回属性Value
/// </summary>
/// <param name="para"></param>
/// <param name="source"></param>
/// <param name="Name"></param>
/// <returns></returns>
public object GetPropertyValue(object source, string Name)
{
if (source != null)
{
string[] propertys = Name.Split('.');
Type t = source.GetType();//获得该类的Type
var m = t.GetProperties().Where(x => x.Name == propertys.First()).FirstOrDefault();
if (m != null)
{
source = m.GetValue(source, null);
}
else
{
source = null;
}
foreach (var item in propertys.Skip(1))
{
source = GetPropertyValue(source, item);
}
}
return source;
}
使用方法
Classb classb = new Classb() { Id=1,Name="sb"};
ClassA classa =CopyBasicProperties<ClassA>(classb);//把classb内基本属性的值 赋值到 classa内的基本属性 (前提是要命名相同才会匹配)
//通过反射对象内属性来赋值,这样的好处就是不用手动维护,而且方便