我正在努力克隆一个引用类型的列表列表。我尝试在我的引用类中实现ICloneable
,但是,它似乎没有在其中调用Clone()
方法。
代码:
public class Solid : ICloneable{
private double[,] _points; //vertices do solido
private int[,] _edges; //arestas do solido
public int[,] Faces { get; private set; } //faces do solido
public int[,] Edges {
get { return _edges; }
set { _edges = value; }
}
...
public object Clone() {
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, this);
ms.Position = 0;
object obj = bf.Deserialize(ms);
ms.Close();
return obj;
}
}
答案 0 :(得分:5)
使用LINQ,您可以执行以下操作:
public List<List<T>> Clone<T>(List<List<T>> original) where T : ICloneable
{
return original
.Select(sl => sl.Select(x => (T)x.Clone()).ToList())
.ToList();
}
答案 1 :(得分:4)
您有T
,其中T
为ICloneable
。
显然,对于每个T
,您只需致电Clone()
即可获得object
(您可以通过退回来转换为public static List<List<T>> Clone<T>(List<List<T>> original)
where T : ICloneable
{
var result = new List<List<T>>();
foreach ( List<T> innerList in original )
{
var innerResult = new List<T>();
foreach ( T item in innerList )
{
var clone = (T)item.Clone();
innerResult.Add(clone);
}
result.Add(innerResult);
}
return result;
}
),但要获得克隆你需要的嵌套列表如下:
Clone()
这将确保在每个T
上调用FuzzyHash
,并且列表(外部和嵌套)是与原始列表分开的实例。