C# DeepCopy routine

本文关键字:routine DeepCopy | 更新日期: 2023-09-27 18:11:13

有人能帮我写一个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];
        }
    }
}

Thanks in advance

C# DeepCopy routine

最简单的深度复制方法是使用某种序列化器(例如BinaryFormatter),但这不仅需要将类型装饰为Serializable,还需要将类型t装饰为t。

它的一个示例实现可以是:

[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;
  }
}
相关文章: