C#当源代码更改时,字典也会更改
当iam向字典添加DatagridviewRow并删除DatagridviewRow时,字典中的DatagridviewRow也会更改。但是我不想让字典改变C#当源代码更改时,字典也会更改,c#,dictionary,datagridview,C#,Dictionary,Datagridview,当iam向字典添加DatagridviewRow并删除DatagridviewRow时,字典中的DatagridviewRow也会更改。但是我不想让字典改变 Dictionary<int, CustomDataGridViewRow> _cache = new Dictionary<int, CustomDataGridViewRow>(); public void add(int index, CustomDataGridViewRow
Dictionary<int, CustomDataGridViewRow> _cache = new Dictionary<int, CustomDataGridViewRow>();
public void add(int index, CustomDataGridViewRow row)
{
_cache.Add(index, row);
}
this.Rows.RemoveAt(1);
Dictionary\u cache=newdictionary();
公共void添加(int索引,CustomDataGridViewRow行)
{
_cache.Add(索引,行);
}
此.Rows.RemoveAt(1);
我试图克隆该行,但我没有复制该行,它生成了一个新行。看看这个:
然后需要在添加字典条目之前克隆对象 字典不包含对象,它包含引用。字典本身并没有改变——它只是包含了对已经改变的对象的引用 如果您的对象支持克隆,则只需使用:
public void Add(int index, CustomDataGridViewRow row)
{
_cache.Add(index, (CustomDataGridViewRow) row.Clone());
}
您可能想查看文档以了解更多详细信息
无论哪种方式,了解引用类型在C#中的工作方式都非常重要,否则您会一次又一次地遇到这种情况。当您将
行添加到字典中时,您将向该行添加引用
这意味着对该行的所有引用都可以看到对该行的更改
您可以通过向字典提供行的副本(也称为克隆)来避免这种情况。字典仅包含引用,请先克隆项:
_cache.Add(index, row.Clone());
看上面的图片。克隆不生成“克隆”,而是生成索引为-1的新行。我做错了什么?因此,如果必须。。。尽管我认为这没有多大意义,但考虑到新行不会与DataGridView
关联。你还没说你想用这些来实现什么…我是个白痴啊。我现在错过了一些有用的东西,谢谢。对不起,最后的评论