我可以在自定义班级列表中使用相同的班级格式列表吗?

问题描述

我正在尝试在 DataGridView 中添加撤消功能

我实现了一个一个处理单元格的功能,但没有实现撤销大单元格的功能

public class Undobuffer
{
    public string undoCell { get; set; }
    public int rowIndex { get; set; }
    public int colIndex { get; set; }
}

这是有问题的代码

第一次执行时声明了类类型的列表,单元格编辑开始和结束时依次保存上一个值、行和列。

但是,执行删除、粘贴或替换等操作后,代码无法正常工作。

所以我尝试在类中添加一个列表,以便在处理大单元格时使用。

像这样

 public class Undobuffer
{
    public string undoCell { get; set; }
    public int rowIndex { get; set; }
    public int colIndex { get; set; }

    public List<Undobuffer> bufferArray = new List<Undobuffer>();  //Added Code
}

声明没有问题,但是当我尝试使用它时,出现了语法错误

我写这段代码的时候是一一分配给缓冲栈的

 private List<Undobuffer> undobuffers = new List<Undobuffer>(); //Declare CustomList
 ...
 ...
 undobuffers.Add(new Undobuffer() { undoCell = beginEditCell,rowIndex = e.RowIndex,colIndex = e.ColumnIndex }); 

并且这段代码用于在缓冲区堆栈上分配大量单元格。

List<Undobuffer> undobuffer = new List<Undobuffer>();

List<Undobuffer> array = new List<Undobuffer>();
array.Add(new Undobuffer()
{
     undoCell = "BeginCell",rowIndex = 33,colIndex = 2
});
array.Add(new Undobuffer()
{
     undoCell = "BeginCell",rowIndex = 34,colIndex = 3
});

**undobuffer.Add(new Undobuffer() {bufferArray.AddRange(array) });** // Grammar error code

我的编码方向是否错误,而不仅仅是语法错误

请,任何建议将不胜感激。

谢谢你

解决方法

在创建类型对象的新实例时,我们不能在初始化成员时将指令作为完整语句执行。我们只能进行赋值,甚至使用对方法或 lambda 的调用,因此 函数 具有返回结果。这里只是过程调用,所以什么都不返回。

因此,为了不替换整个列表,并且能够添加范围,我们需要将事物解耦并编写:

var buffer = new UndoBuffer();
buffer.bufferArray.AddRange(array);
undobuffer.Add(buffer);

另外,bufferArray 似乎是一个 composite,因此它应该是一个仅获取属性(如果是公共的),或者是一个只读的私有或受保护的 字段,在声明时或在构造函数中初始化:

public List<UndoBuffer> bufferArray { get; } = new List<UndoBuffer>();

我建议您改进命名,使其更加标准、相关和干净,例如:

public class UndoBuffer
{
    public string UndoCellText { get; set; }
    public int RowIndex { get; set; }
    public int ColIndex { get; set; }

    public List<UndoBuffer> Buffers { get; } = new List<UndoBuffer>();
}

C# Coding Conventions (C# Programming Guide)

C# Naming Conventions

C# Coding Standards and Naming Conventions