问题描述
我实现了一个一个处理单元格的功能,但没有实现撤销大单元格的功能。
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>();
}