我可以在自定义 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>();
}
我正在尝试在 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>();
}