以下的这个类实现了 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
{
//
}
}
}
}
}