克隆对象(尤其是ICloneable接口)的问题在于公共接口不能很好地传达意图.
即 - 克隆的这种Clone功能是否也List<T>包含元素,或者只是克隆列表并复制对包含元素的引用?浅拷贝,复制引用并仅创建新列表将等效于:
List<T> clone = new List<T>(originalList);
Run Code Online (Sandbox Code Playgroud)
但是,如果你想强制克隆所有包含的元素,那么它将等同于:
List<T> clone = originalList.Select(x => (T)x.Clone()).ToList();
Run Code Online (Sandbox Code Playgroud)
这假设该类型T正在实施ICloneable.但是,即使使用此解决方案,也无法提前告知代码执行的确切影响.x克隆自身元素意味着什么?它是一个浅层副本(由MemberwiseClone它继承形式的方法提供System.Object),还是一个深层副本.如果很深,如果列表中的两个对象引用相同的第三个对象会发生什么?第三个对象是复制两次还是只复制一次?等等......你可以看到它的发展方向.
由于上面列出的所有原因,克隆设施未包含在框架中.它由自定义代码决定克隆对象然后为其实现自定义代码的含义.
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |