C# 4.0 如何遍历KeyValuePair集合
我正在迭代KeyValuePair的集合,然后将密钥和值复制到新创建的类中,如下所示:C# 4.0 如何遍历KeyValuePair集合,c#-4.0,keyvaluepair,C# 4.0,Keyvaluepair,我正在迭代KeyValuePair的集合,然后将密钥和值复制到新创建的类中,如下所示: Classes.MemberHierarchy membHier = new Classes.MemberHierarchy(); List<Classes.MemberHierarchy> membHierList = new List<Classes.MemberHierarchy>(); foreach (KeyValuePair<
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);
}
Classes.MemberHierarchy membHier=新类.MemberHierarchy();
List membHierList=新列表();
foreach(acctData中的KeyValuePair acct)
{
membHier.entityName=账户密钥;
membHier.Accounts=账户价值;
membHier list.Add(membHier);
}
问题是在第二次迭代时,membHierList属性会立即被第一次迭代中的值覆盖。这很奇怪
因此,在第一次迭代时,membHier.entityName是“ABC成员”,并且帐户将使用字符串数组填充,没有问题
然后在第二次迭代时,membHier.entityName是“XYZ成员”
现在,“XYZ成员”占用两个插槽,如下所示
membHierList[0]。base.entityName=“XYZ成员”
membHierList[1].base.entityName=“XYZ成员”
上面有物体冲突吗
先谢谢你。。。。
Bob您需要将
membHier
的构造移动到foreach循环的内部。按照现在编写代码的方式,只创建MemberHierarchy类的一个实例
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);
}
List membHierList=newlist();
foreach(acctData中的KeyValuePair acct)
{
Classes.MemberHierarchy membHier=新类.MemberHierarchy();
membHier.entityName=账户密钥;
membHier.Accounts=账户价值;
membHier list.Add(membHier);
}
使用当前的C#4.0语法,它看起来像:
var membHierList = new List<Classes.MemberHierarchy>();
foreach (var acct in acctData)
{
membHierList.Add(new Classes.MemberHierarchy
{
entityName = acct.Key;
Accounts = acct.Value;
});
}
var membHierList=newlist();
foreach(账户数据中的var账户)
{
membHierList.Add(新类.MemberHierarchy)
{
entityName=账户密钥;
账户=账户价值;
});
}
不,这并不奇怪,因为在循环之前只声明并初始化了对象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);
}
List membHierList=newlist();
foreach(acctData中的KeyValuePair acct)
{
Classes.MemberHierarchy membHier=新类.MemberHierarchy();
membHier.entityName=账户密钥;
membHier.Accounts=账户价值;
membHier list.Add(membHier);
}
在每个循环中声明对象的新实例MemberHierarchy
,将使用不同的实例填充列表,每个实例都有自己的值。相反,当初始化在循环之外时,在每次迭代中,您都使用提取的值更新同一实例。但是
membHier
是一种引用类型,因此如果不重新初始化,它将指向存储第一个实体的值的同一内存,您可以使用第二个实体有效地覆盖这些值。最后,列表中的所有元素都指向相同的内存位置,这些内存位置包含最后一个实体的数据