技术开发 频道

C# Tips:浅拷贝和深拷贝

  通过反射实现

  通过序列化/反序列化方式我们能比较流畅的实现深拷贝,但是涉及到IO操作,托管的的环境中,IO操作比较消耗资源。 能不能有更优雅的解决方案。CreateInstance,对,利用反射特性。这个方法大家可以参考这篇博客:http://rubenhak.com/?p=70 文章反射类的Attribute,利用Activator.CreateInstance New一个类出来(有点像DataSet.Clone先获得架构),然后利用PropertyInfo的SetValue和GetValue方法,遍历的方式进行值填充。

  代码实现如下: 

public class Person
{
    
private List<Person> _friends = new List<Person>();

    
public string Firstname { get; set; }
    
public string Lastname { get; set; }

    [Cloneable(CloneableState.Exclude)]
    [Cloneable(CloneableState.Include,
"Friends")]
    
public List<Person> Friends { get { return _friends; } }

    [Cloneable(CloneableState.Exclude)]
    
public PersonManager Manager { get; set; }
}
0
相关文章