以下的这个类实现了 2个含有部分字段名字相同 的对象的 赋值拷贝。
public class ShallowCopyHelper
{
public static void CopyPropertiesValue(object objFrom, object objTo)
{
if (null == objFrom)
{
return;
}
if (null == objTo)
{
return;
}
Type typeFrom = objFrom.GetType();
Type typeTo = objTo.GetType();
if (objFrom is IList)
{
try
{
int count = (objFrom as IList).Count;
for (int i = 0; i < count; i++)
{
CopyPropertiesValue((objFrom as IList)[i], (objTo as IList)[i]);
}
}
catch
{
//
}
}
else
{
foreach (System.Reflection.PropertyInfo pi in
typeFrom.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
{
try
{
object valueFrom = typeFrom.GetProperty(pi.Name).GetValue(objFrom, null);
object valueTo = typeTo.GetProperty(pi.Name).GetValue(objTo, null);
if (typeFrom.GetProperty(pi.Name).PropertyType.IsClass
&& !typeFrom.GetProperty(pi.Name).PropertyType.IsPrimitive
&& !(valueFrom is String))
{
CopyPropertiesValue(valueFrom, valueTo);
}
else
{
if (valueFrom == null || !valueFrom.Equals(valueTo))
{
//Set value to latest data
typeTo.GetProperty(pi.Name).SetValue(objTo, valueFrom, null);
}
}
}
catch
{
//
}
}
}
}
}