我有两个我初始化的对象:
var series = new Dictionary<string,Dictionary<string,int>>()
{
{"0", new Dictionary<string, int>() },
{"1", new Dictionary<string, int>() },
{"2", new Dictionary<string, int>() }
}
var periodValues = new Dictionary<string,int>();
{
{"Jan", 0 },
{"Feb", 0 },
{"Mar", 0 }
}
然后我有另一个带有填充值的对象:
var target = new Dictionary<string,Dictionary<string,int>>()
{
{ "0",
new Dictionary<string, int>()
{
{"Jan", 12 },
{"Mar", 22 }
}
},
{ "1",
new Dictionary<string, int>()
{
{"Mar", 37 }
}
},
{ "2",
new Dictionary<string, int>()
{
{"Jan", 4 },
{"Feb", 48 },
{"Mar", 22 }
}
}
}
series
和target
始终相同Key
,而target[key].Keys
(key
类型string
)任何{{1} }}可以是key
的子集(最多相同)。
现在,我想根据periodValues.Keys
中的密钥填充series.Values
,但值为periodValues.Keys
。因此:
target[key].Value
但我属于外部变量陷阱 ...这意味着任何foreach (var numberValue in target.Keys)
{
foreach (var period in target[numberValue].Keys)
{
periodValues[period] = target[numberValue][period];
}
series[numberValue] = periodValues;
}
的所有series[key]
都等于最后一个series.Keys
。我尝试了许多解决方案来逃避外部变量陷阱,根据this article没有运气。有谁知道解决方案或更好的方法?
答案 0 :(得分:0)
如果有人感兴趣,我通过在第一个periodValues
内声明并初始化foreach
来解决问题:
foreach (var numberValue in target.Keys)
{
var periodValues = new Dictionary<string,int>();
{
{"Jan", 0 },
{"Feb", 0 },
{"Mar", 0 }
}
foreach (var period in target[numberValue].Keys)
{
periodValues[period] = target[numberValue][period];
}
series[numberValue] = periodValues;
}