我有一个对象列表:
List<NPortfolio> Portfolios = new List<NPortfolio>();
Portfolios.Add(new NPortfolio(1, "1", emptyPositions));
Portfolios.Add(new NPortfolio(2, "2", emptyPositions));
现在我想在修改其属性的对象上调用一个Method:
Portfolios[0].UpdatePositions(db.GetPortfolio(1, Today));
方法是:
public void UpdatePositions(Dictionary<string, double> valuepairs)
{
foreach (var k in this.positions.Keys.ToList())
{
if (valuepairs.ContainsKey(k))
this.positions[k] = valuepairs[k];
}
}
这样可行,但问题是当我尝试仅更新列表的第一项时:
Portfolios[0].UpdatePositions(db.GetPortfolio(1, Today));
列表中的所有项目都已更新!!! 我找不到为什么所有项目都更新,而不仅仅是项目0。 请帮助这真是令人头疼
非常感谢类定义:
public class NPortfolio
{
public string p_id { get; set; }
public int p_nr { get; set; }
private Dictionary<string, double> positions;
public NPortfolio(int nr, string id, Dictionary<string, double> pos)
{
p_nr = nr;
p_id = id;
positions = pos;
}
public void UpdatePositions(Dictionary<string, double> valuepairs)
{
foreach (var k in this.positions.Keys.ToList())
{
if (valuepairs.ContainsKey(k))
this.positions[k] = valuepairs[k];
}
}
public Dictionary<string, double> getPositions()
{
return positions;
}
}
答案 0 :(得分:1)
问题来自于此
Portfolios.Add(new NPortfolio(1, "1", emptyPositions));
Portfolios.Add(new NPortfolio(2, "2", emptyPositions));
您将相同的字典传递给这两个类,因此如果您修改其中一个类,则修改这两个类。
您必须在NPortfolio
的构造函数内创建一个新字典,以便每个类都有一个唯一的副本。
public NPortfolio(int nr, string id, Dictionary<string, double> pos)
{
p_nr = nr;
p_id = id;
positions = new Dictionary<string, double>(pos);
}
这将生成字典的the Wikipedia link you gave,现在应解决您的问题。
答案 1 :(得分:0)
您将相同的字典传递到对象中。因此,当您在一个中更新它时,您最终会看到另一个中的更改。您应该在构造函数中创建一个新字典,并使用传入的值填充它。
public NPortfolio(int nr, string id, Dictionary<string, double> pos)
{
p_nr = nr;
p_id = id;
positions = new Dictionary<string, double>(pos);
}