Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从本地数据结构中删除元素会影响父对象_C# - Fatal编程技术网

C# 从本地数据结构中删除元素会影响父对象

C# 从本地数据结构中删除元素会影响父对象,c#,C#,我有下面的代码,我正在检查字典中是否有不匹配的元素,然后我想从本地项中删除不匹配的元素。问题是,当从集合中删除值时,出于某种原因,它还会修改父结构 我的另一个问题是,例如,如果我的列表是“A”、“B”、“B”,那么使用Except只会给我一个B,而不会给我另一个。请帮忙 public void AddLogs(IEnumerable<ReportGenerationTypes> subElements) { var changeDeta

我有下面的代码,我正在检查字典中是否有不匹配的元素,然后我想从本地项中删除不匹配的元素。问题是,当从集合中删除值时,出于某种原因,它还会修改父结构

我的另一个问题是,例如,如果我的列表是“A”、“B”、“B”,那么使用Except只会给我一个B,而不会给我另一个。请帮忙

 public void AddLogs(IEnumerable<ReportGenerationTypes> subElements)
    {
                   var changeDetails = new Dictionary<AuditSaveHeader, List<string>>();
                    List<string> AuditableItems = null;
                    List<string> subItems = new List<string>();
                    foreach (var item in subElements)
                    {
                        subItems.Add(item.ToString());
                    }
                    foreach (var item in auditLogData?.AuditHeaders)
                    {
                        if (!changeDetails.ContainsKey(item))
                        {
                            changeDetails.Add(item, null);
                        }
                        AuditableItems = new List<string>();
                        foreach (var inner in item.AuditChangeValues)
                        {
                            AuditableItems.Add(inner.Auditable.ToString());
                        }
                        changeDetails[item] = AuditableItems;
                    }


                    for (int i = 0; i < changeDetails.Count; i++)
                    {

                            var result = kp.Value.Except(subItems);
                            Auditable AuditItem = Auditable.Unassigned;

                           //I think the problem lies with the below code not sure.
                            if (result != null && result.Count() > 0)
                            {
                                foreach (var item in result)
                                {
                                    Enum.TryParse(item, out AuditItem);
                                    var itemToRemove = kp.Key.AuditChangeValues.Where(x => x.Auditable == AuditItem).FirstOrDefault();
//The following line effects the AuditChangeValues object and not just my dictionary.                                    
kp.Key.AuditChangeValues.Remove(itemToRemove);
                                }
                            }
                     }

    }
public void addlog(IEnumerable子元素)
{
var changeDetails=newdictionary();
List AuditableItems=null;
列表子项=新列表();
foreach(子元素中的变量项)
{
添加(item.ToString());
}
foreach(auditLogData?.AuditHeaders中的var项)
{
如果(!changeDetails.ContainsKey(项目))
{
changeDetails.Add(项,空);
}
AuditableItems=新列表();
foreach(item.AuditChangeValues中的内部变量)
{
Add(inner.Auditable.ToString());
}
changeDetails[项目]=可审核项目;
}
for(int i=0;i0)
{
foreach(结果中的var项目)
{
样本(项目,项目外);
var itemToRemove=kp.Key.AuditChangeValues.Where(x=>x.Auditable==AuditItem.FirstOrDefault();
//下一行影响AuditChangeValues对象,而不仅仅是我的字典。
kp.Key.AuditChangeValues.Remove(itemToRemove);
}
}
}
}

推广我的评论以回答:


您正在使用一些未显示的变量,如kp、auditLogData等,但总体上不清楚您想要实现什么


无论如何,我同意问题是你正在编辑一个对象的引用。您可以尝试克隆对象等。但如果不真正理解代码,则很难判断。

“当从集合中删除值时,由于某种原因,它还会修改父结构。”这听起来像是遇到了引用机制的调用。两个引用变量最终引用内存中的同一事物。如果你学习了关于字符串的这部分类力学,那么有一个坏消息:字符串是这个领域中少数几个不同的类之一。但在我的情况下,我该如何解决我的问题呢。我可以使用什么值类型来代替列表作为字典值?您正在使用一些未显示的变量,如
kp
auditLogData
,等等。总体上不清楚您想要实现什么。无论如何,我同意问题是你正在编辑一个对象的引用。你可以尝试克隆对象,等等。但是如果不真正理解代码,就很难说了。当然,谢谢你,我就是这么想的。我必须创建一个本地对象并克隆它。是的,我克隆了这个对象,它工作得很好。谢谢,太棒了!很乐意帮忙:)