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

Can I use same Class Format list in a Custom Class List?

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

我实现了逐个处理单元格的功能,但没有实现撤消大单元格的功能。

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

这是有问题的代码。

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

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

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

像这样

 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 的调用,所以 function 有 return 结果。这里只是过程调用,所以 return 什么都没有。

因此,为了不替换整个列表,并且能够添加范围,我们需要解耦这些东西并写成:

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

此外,bufferArray 似乎是 composite,因此它应该是 get only 属性 if public ,或 readonly private 或 protected 字段,在声明时或在构造函数中初始化:

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