博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 对象间的 深拷贝 实现
阅读量:4920 次
发布时间:2019-06-11

本文共 1239 字,大约阅读时间需要 4 分钟。

<?xml version="1.0" encoding="UTF-8"?>
    以下的这个类实现了 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
                    {
                       
//
                    }
                }
            }
        }
    }

转载于:https://www.cnblogs.com/muzizongheng/p/3169138.html

你可能感兴趣的文章
[mark]如何删除地址栏的记录?
查看>>
python CSV写中文
查看>>
poj3304 Segments
查看>>
Android onNewIntent调用时机
查看>>
命令模式
查看>>
MySQL 基础命令
查看>>
用css画个遨游logo
查看>>
杭电2061
查看>>
硬盘的工作原理
查看>>
开发日志
查看>>
使用 Intellij Idea 导出JavaDoc
查看>>
js -- 写个闭包
查看>>
属性动画
查看>>
html5中<body>标签支持的事件
查看>>
F. 约束
查看>>
安装 jdk
查看>>
对康拓展开式和逆康托展开式的认识
查看>>
第二次作业(homework-02)成绩公布
查看>>
KVM&amp;Libvirt基本概念及开发杂谈
查看>>
flv视频格式详细解析
查看>>