有人可以帮助我为这个矩阵类编写DeepCopy例程吗?我在C#中没有很多经验。
public class Matrix<T>
{
private readonly T[][] _matrix;
private readonly int row;
private readonly int col;
public Matrix(int x, int y)
{
_matrix = new T[x][];
row = x;
col = y;
for (int r = 0; r < x; r++)
{
_matrix[r] = new T[y];
}
}
}
提前致谢
答案 0 :(得分:2)
最简单的深度复制方法是使用某种序列化程序(例如BinaryFormatter
),但这不仅要求将您的类型修饰为Serializable
,还要使用类型T. < / p>
该示例的实现可以是:
[Serializable]
public class Matrix<T>
{
// ...
}
public static class Helper
{
public static T DeepCopy<T>(T obj)
{
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
stream.Position = 0;
return (T) formatter.Deserialize(stream);
}
}
}
这里的问题是,您无法控制作为泛型类型参数提供的类型。在不了解您希望克隆哪种类型的情况下,一个选项可能是在T上放置泛型类型约束,只接受实现ICloneable
的类型。
在这种情况下,您可以像这样克隆Matrix<T>
:
public class Matrix<T> where T: ICloneable
{
// ... fields and ctor
public Matrix<T> DeepCopy()
{
var cloned = new Matrix<T>(row, col);
for (int x = 0; x < row; x++) {
for (int y = 0; y < col; y++) {
cloned._matrix[x][y] = (T)_matrix[x][y].Clone();
}
}
return cloned;
}
}