bob*_*zzo 1 c#-4.0 keyvaluepair
我遍历KeyValuePair的集合,然后将Key和Value复制到一个新创建的类中,如下所示:
Classes.MemberHierarchy membHier = new Classes.MemberHierarchy();
List<Classes.MemberHierarchy> membHierList = new List<Classes.MemberHierarchy>();
foreach (KeyValuePair<string, string[]> acct in acctData)
{
membHier.entityName = acct.Key;
membHier.Accounts = acct.Value;
membHierList.Add(membHier);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,在第二次迭代中,membHierList属性立即被第一次迭代中的值覆盖。真奇怪
因此,在第一次迭代时,membHier.entityName是“ ABC Member”,并且使用字符串数组填充Accounts没问题。
然后在第二次迭代中,membHier.entityName为“ XYZ成员”。
现在,“ XYZ成员”占据了两个插槽,如下所示
membHierList [0] .base.entityName =“ XYZ成员” membHierList [1] .base.entityName =“ XYZ成员”
我上方有物体冲突吗?
预先谢谢你。
不,这并不奇怪,因为您membHier在循环之前就声明并初始化了对象,然后尝试在新列表中插入相同的对象。
这样可以解决您的问题
List<Classes.MemberHierarchy> membHierList = new List<Classes.MemberHierarchy>();
foreach (KeyValuePair<string, string[]> acct in acctData)
{
Classes.MemberHierarchy membHier = new Classes.MemberHierarchy();
membHier.entityName = acct.Key;
membHier.Accounts = acct.Value;
membHierList.Add(membHier);
}
Run Code Online (Sandbox Code Playgroud)
MemberHierarchy在每个循环中声明对象的NEW实例将在列表中填充不同的实例,并且每个实例都有其自己的值。
取而代之的是,在循环外进行初始化,在每次迭代时,您都使用提取的值更新同一实例。但是membHier是引用类型,因此,如果不进行初始化,它会指向存储第一个实体的值的同一内存,并有效地用第二个实体覆盖这些值。最后,列表中的所有元素都指向相同的存储位置,并且这些存储位置包含最后一个实体的数据